[wp-trac] [WordPress Trac] #53191: When upgrading translations and destination does NOT exist all files end up in "wp-content/plugins"

WordPress Trac noreply at wordpress.org
Wed May 12 04:57:56 UTC 2021


#53191: When upgrading translations and destination does NOT exist all files end up
in "wp-content/plugins"
-----------------------------+-----------------------------
 Reporter:  jobst            |      Owner:  (none)
     Type:  defect (bug)     |     Status:  new
 Priority:  normal           |  Milestone:  Awaiting Review
Component:  Upgrade/Install  |    Version:  5.7.1
 Severity:  major            |   Keywords:
  Focuses:  administration   |
-----------------------------+-----------------------------
 Hi

 **Current install:**
 Using the LATEST version of WordPress, the line numbers in this bug report
 relate to that version number.


 **Problem Discription:**
 I noticed a huge (220+) amount of .json, .mo and .po files in the "wp-
 content/plugins" directory. They shouldn't be there, in fact they should
 be in "wp-content/languages/plugins".


 **Overview of Fix:**
 I researched why that maybe the case and found the problem: if the
 directory "wp-content/languages/plugins" does NOT exist, all json/po/mo
 files are placed into "wp-content/plugins" - which in itself is a "no no"
 as the directory belongs to the "protected" directory set (I get to that
 later).
 If the directory exists, there is no problem and all files end up in the
 correct directory and NOT in the "wp-content/plugins".


 **Where I think the error comes from:**
 For every language file that is updated the function "install_package()"
 in "class-wp-upgrader.php" is called. The parameter passed is an array
 containing the SOURCE and DESTINATION of the file needing an update.

 The DESTINATION is correct when passed to the function "install_package()"
 but gets altered when the DESTINATION does not exist on line 501:

 {{{
 $remote_destination = $wp_filesystem->find_folder( $local_destination );
 }}}

 If the directory "wp-content/languages/plugins" exists, there is NO
 problem.

 If the directory "wp-content/languages/plugins" DOES NOT exist, there is a
 problem and
 {{{
  $remote_destination
 }}}
 is set to "wp-content/plugins" - which in fact belongs to the "protected
 directories"


 **What steps should be taken to consistently reproduce the problem?**
 Delete the directory "wp-content/languages/plugins" and update
 translations.
 All *.json, *.po and *.mo files will end up in "wp-content/plugins"


 **Does the problem occur even when you deactivate all plugins and use the
 default theme?**
 Not related, as issue is MISSING PATH related.


 **In case it's relevant to the ticket, what is the expected output or
 result?**
 I would assume that the directory "wp-content/languages/plugins" should be
 created if it is missing and not place all files in "wp-content/plugins"

 I for now have created the directory, but I saw on the Internet that MANY
 people seeing large amount of files in the plugins directory "wp-
 content/plugins".

 Also "wp-content/plugins" belongs to the group of "protected directories"
 as seen on line 545 in file class-wp-upgrader.php:

 {{{
 $protected_directories = array( ABSPATH, WP_CONTENT_DIR, WP_PLUGIN_DIR,
 WP_CONTENT_DIR . '/themes' );
 }}}

 so for that reason alone no file SHOULD end up in there.

 Also, it's ugly to have 200+ language files in the plugin folder where you
 should only find directories for plugins.

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/53191>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list