WordPress.org

Make WordPress Core

Ticket #14429: 14429-strpbrk.7.patch

File 14429-strpbrk.7.patch, 1.5 KB (added by hakre, 9 years ago)

Based on [15636], as previous and runtime optimized to check on second char prior to check anything else.

  • wp-includes/functions.php

     
    228228 * @return bool False if not serialized and true if it was.
    229229 */
    230230function is_serialized( $data ) {
     231        static $strpbrk_exists;
    231232        // if it isn't a string, it isn't serialized
    232233        if ( !is_string( $data ) )
    233234                return false;
    234235        $data = trim( $data );
    235236        if ( 'N;' == $data )
    236237                return true;
    237         if ( function_exists('strpbrk') ) {
    238                 if ( strlen($data) > 1 && strpbrk($data,'adObis') == $data && $data[1] == ':' ) {
    239                         $badions = array();
    240                         $badions[1] = $data[0];
    241                 } else {
    242                         return false;
    243                 }
    244         } elseif ( !preg_match( '/^([adObis]):/', $data, $badions ) ) {
     238        if ( strlen( $data ) < 4 )
    245239                return false;
     240        if ( ':' !== $data[1] )
     241                return false;
     242        $token = $data[0];
     243        isset( $strpbrk_exists ) || $strpbrk_exists = function_exists( 'strpbrk' );
     244        if ( $strpbrk_exists && strpbrk( $data, 'adObis' ) !== $data ) {
     245                return false;
     246        } elseif ( false === strpos( 'adObis', $token ) ) {
     247                return false;
    246248        }
    247         switch ( $badions[1] ) {
     249        switch ( $token ) {
    248250                case 'a' :
    249251                case 'O' :
    250252                case 's' :
    251                         if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) )
     253                        if ( preg_match( "/^{$token}:[0-9]+:.*[;}]\$/s", $data ) )
    252254                                return true;
    253255                        break;
    254256                case 'b' :
    255257                case 'i' :
    256258                case 'd' :
    257                         if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) )
     259                        if ( preg_match( "/^{$token}:[0-9.E-]+;\$/", $data ) )
    258260                                return true;
    259261                        break;
    260262        }