[wp-trac] [WordPress Trac] #50534: Menu position conflicts not properly handled in add_menu_page function
WordPress Trac
noreply at wordpress.org
Thu Jul 2 14:16:37 UTC 2020
#50534: Menu position conflicts not properly handled in add_menu_page function
----------------------------+------------------------------
Reporter: nufocusuk | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Administration | Version: trunk
Severity: normal | Resolution:
Keywords: | Focuses:
----------------------------+------------------------------
Changes (by SergeyBiryukov):
* component: General => Administration
Old description:
> In add_menu_page function inside plugin.php the assignment of new menu in
> the else condition should have $position inside quotes in the same way as
> the other lines.
>
> If $position is passed in with a decimal value 103.768 (as supplied my
> MailChimp Forms by MailMunch plugin) then it fails to detect if
> $menu[103] has already been assigned by another plugin, but then
> overwrites it by impicitly treating $position as integer rather than a
> string as in $menu["103.768"].
>
> Result is that random plugins can be missing from the admin menu.
>
> if ( null === $position ) {
> $menu[] = $new_menu;
> } elseif ( isset( $menu[ "$position" ] ) ) {
> $position = $position + substr( base_convert( md5(
> $menu_slug . $menu_title ), 16, 10 ), -5 ) * 0.00001;
> $menu[ "$position" ] = $new_menu;
> } else {
> $menu[ **$position** ] = $new_menu; //# should be change to
> **$menu[ "$position" ] = $new_menu;**
> }
New description:
In add_menu_page function inside plugin.php the assignment of new menu in
the else condition should have $position inside quotes in the same way as
the other lines.
If `$position` is passed in with a decimal value 103.768 (as supplied my
MailChimp Forms by MailMunch plugin) then it fails to detect if
`$menu[103]` has already been assigned by another plugin, but then
overwrites it by impicitly treating $position as integer rather than a
string as in `$menu["103.768"]`.
Result is that random plugins can be missing from the admin menu.
{{{
if ( null === $position ) {
$menu[] = $new_menu;
} elseif ( isset( $menu[ "$position" ] ) ) {
$position = $position + substr( base_convert( md5(
$menu_slug . $menu_title ), 16, 10 ), -5 ) * 0.00001;
$menu[ "$position" ] = $new_menu;
} else {
$menu[ **$position** ] = $new_menu; //# should be change to
**$menu[ "$position" ] = $new_menu;**
}
}}}
--
--
Ticket URL: <https://core.trac.wordpress.org/ticket/50534#comment:1>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list