Make WordPress Core


Ignore:
Timestamp:
11/03/2014 02:24:23 PM (10 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.