[wp-trac] [WordPress Trac] #42670: Symlinked plugin makes plugin_basename function return wrong basename

WordPress Trac noreply at wordpress.org
Sat May 21 00:36:50 UTC 2022

#42670: Symlinked plugin makes plugin_basename function return wrong basename
 Reporter:  sergiienko         |       Owner:  (none)
     Type:  defect (bug)       |      Status:  new
 Priority:  normal             |   Milestone:  Awaiting Review
Component:  Plugins            |     Version:  4.9
 Severity:  normal             |  Resolution:
 Keywords:  reporter-feedback  |     Focuses:

Comment (by brianhenryie):

 This issue is a continuation of [28441] where [@ocean90] introduced
 `arsort()` in patch [37983] to address the same problem.

 The reasoning behind using `arsort()` is sound, but the patch failed to
 `break` after matching and a scenario exists where the wrong basename can
 still be returned.

 Given a project structure:

 /Users/brianhenry/Sites/my-plugin/my-plugin.php (An empty plugin, only
 /Users/brianhenry/Sites/my-plugin/wordpress (WordPress installed here)
 /Users/brianhenry/Sites/my-plugin/wordpress/wp-content (Symlink to
 /Users/brianhenry/Sites/my-plugin/wp-content/plugins/my-plugin (Symlink to

 Looking at `plugin_basename()`, after `arsort()` `$wp_plugins_path` will
 look like:

 array (
 content/plugins/woocommerce' => '/Users/brianhenry/Sites/my-plugin/wp-
 plugin' => '/Users/brianhenry/Sites/my-plugin',

 Running `plugin_basename( __FILE__ )` for WooCommerce means
 `plugin_basename( '/Users/brianhenry/Sites/my-plugin/wp-
 content/plugins/woocommerce/woocommerce.php' )`.

 The operation `if ( strpos( $file, $realdir ) === 0 )` (does `$file` begin
 with `$realdir`?) evaluates to true for both values in the array.

 Using `arsort()` is certainly key to solving this, but the `for` loop must
 `break` once it matches. i.e. use the most specific match (the longest),
 any subsequent matches will be less specific.

 This patch adds only `break;`.

Ticket URL: <https://core.trac.wordpress.org/ticket/42670#comment:2>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform

More information about the wp-trac mailing list