WordPress.org

Make WordPress Core

Ticket #14429: 14429-strpbrk.5.patch

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

Based on [15636], as previous but runtime optimized for 99% of all non serialized strings larger than 3 chars

  • 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        $token = $data[0]; 
     241        isset( $strpbrk_exists ) || $strpbrk_exists = function_exists( 'strpbrk' ); 
     242        if ( $strpbrk_exists && ( ':' !== $data[1] || strpbrk( $data, 'adObis' ) !== $data ) ) { 
     243                return false; 
     244        } elseif ( !preg_match( '/^([adObis]):/', $data ) ) { 
     245                return false; 
    246246        } 
    247         switch ( $badions[1] ) { 
     247        switch ( $token ) { 
    248248                case 'a' : 
    249249                case 'O' : 
    250250                case 's' : 
    251                         if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) ) 
     251                        if ( preg_match( "/^{$token}:[0-9]+:.*[;}]\$/s", $data ) ) 
    252252                                return true; 
    253253                        break; 
    254254                case 'b' : 
    255255                case 'i' : 
    256256                case 'd' : 
    257                         if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) ) 
     257                        if ( preg_match( "/^{$token}:[0-9.E-]+;\$/", $data ) ) 
    258258                                return true; 
    259259                        break; 
    260260        }