<p>In <a href="https://github.com/geany/geany/pull/629#discussion_r41071009">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>
<blockquote>
<p>BTW, this is always called with the result of g_build_filename() (either directly or via plugin->filename) so it's kind of guaranteed it's a canonical path.</p>
</blockquote>

<p>Fair enough if it's the case.  Can't this change in the prefs? (e.g. if I manually alter the config file of the enabled plugin list)</p>

<blockquote>
<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>
</blockquote>

<p>Well, sure, if it's something we can totally rely on.  But that means we need to guarantee it -- and here it's not really a "deep function" in that it extract a very low level info (the extension) --, e.g. that we don't work on paths as the OS understands it, but on an internal representation.</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#r41071009">view it on GitHub</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/ABDrJ906WVfgXDcAm2PIxvlRG7r9Xn40ks5o3vJMgaJpZM4Fy7fG.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#r41071009"></link>
  <meta itemprop="name" content="View Pull Request"></meta>
</div>
<meta itemprop="description" content="View this Pull Request on GitHub"></meta>
</div>