<p>In <a href="https://github.com/geany/geany/pull/629#discussion_r41070363">src/plugins.c</a>:</p>
<pre style='color:#555'>> @@ -830,25 +1011,80 @@ static gboolean check_plugin_path(const gchar *fname)
> }
>
>
> +/* Retuns NULL if this ain't a plugin,
> + * otherwise it returns the appropriate PluginProxy instance to load it */
> +static PluginProxy* is_plugin(const gchar *file)
> +{
> + GList *node;
> + const gchar *ext;
> +
> + /* extract file extension to avoid g_str_has_suffix() in the loop */
> + ext = (const gchar *)strrchr(file, '.');
> + if (ext == NULL)
> + return FALSE;
> + /* ensure the dot is really part of the filename */
> + else if (strchr(ext, G_DIR_SEPARATOR) != NULL)
> + return FALSE;
</pre>
<p>Actually, I'm preferring to leave it. We can't have paranoid checks everywhere, even in the deepest leaf functions. At some point we can/have to/should depend on earlier code to provide canonical paths, as is the case here.</p>
<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br>Reply to this email directly or <a href="https://github.com/geany/geany/pull/629/files#r41070363">view it on GitHub</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/ABDrJyQqlZh_mVZHT1W8_DsBtzrpuX2Mks5o3vBUgaJpZM4Fy7fG.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
<link itemprop="url" href="https://github.com/geany/geany/pull/629/files#r41070363"></link>
<meta itemprop="name" content="View Pull Request"></meta>
</div>
<meta itemprop="description" content="View this Pull Request on GitHub"></meta>
</div>