Make WordPress Core


Ignore:
Timestamp:
11/03/2014 02:24:23 PM (12 years ago)
Author:
boonebgorges
Message:

In in_object_in_term(), only check numeric string values against term_id.

The previous in_array() check was playing too loose with mixed types, such
that a string like '10_term_name' would incorrectly match a term_id 10.

Props nobinobi, realloc.
Fixes #29467.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/taxonomy.php

    r30184 r30205  
    42634263
    42644264        foreach ( $object_terms as $object_term ) {
    4265                 if ( $ints && in_array( $object_term->term_id, $ints ) ) return true; // If int, check against term_id
     4265                // If term is an int, check against term_ids only.
     4266                if ( $ints && in_array( $object_term->term_id, $ints ) ) {
     4267                        return true;
     4268                }
     4269
    42664270                if ( $strs ) {
    4267                         if ( in_array( $object_term->term_id, $strs ) ) return true;
    4268                         if ( in_array( $object_term->name, $strs ) )    return true;
    4269                         if ( in_array( $object_term->slug, $strs ) )    return true;
     4271                        // Only check numeric strings against term_id, to avoid false matches due to type juggling.
     4272                        $numeric_strs = array_map( 'intval', array_filter( $strs, 'is_numeric' ) );
     4273                        if ( in_array( $object_term->term_id, $numeric_strs, true ) ) {
     4274                                return true;
     4275                        }
     4276
     4277                        if ( in_array( $object_term->name, $strs ) ) return true;
     4278                        if ( in_array( $object_term->slug, $strs ) ) return true;
    42704279                }
    42714280        }
Note: See TracChangeset for help on using the changeset viewer.