Ticket #9930: 9930.2.patch
File 9930.2.patch, 2.3 KB (added by , 15 years ago) |
---|
-
wp-includes/functions.php
217 217 } 218 218 219 219 /** 220 * Check value to find if it was serialized.220 * Check if value is serialized. 221 221 * 222 222 * If $data is not an string, then returned value will always be false. 223 223 * Serialized data is always a string. 224 * 225 * NOTICE: There can be no guarantee wether the data passed was not 226 * just a string even if this function returns true. 224 227 * 225 228 * @since 2.0.5 226 229 * 227 230 * @param mixed $data Value to check to see if was serialized. 228 * @return bool False if not serialized and true if it was.231 * @return bool False if not serialized and true if. 229 232 */ 230 233 function is_serialized( $data ) { 231 // if it isn't a string, it isn't serialized232 234 if ( !is_string( $data ) ) 233 235 return false; 234 236 $data = trim( $data ); 235 237 if ( 'N;' == $data ) 236 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 return true; # NULL; fixed length: 2 239 if ( strlen( $data ) < 4 ) 245 240 return false; 241 if ( ':' !== $data[1] ) 242 return false; 243 $type = $data[0]; 244 if ( false === strpos('abdiOs', $type ) ) 245 return false; 246 247 switch ( $type ) { 248 case 'a' : # array; min length: 6 249 return (bool) preg_match( '/^a:[0-9]+:{.*}$/s', $data ); 250 case 'b' : # bool; min length: 4 251 case 'd' : # double; min length: 4 252 case 'i' : # integer; min length: 4 253 return (bool) preg_match( "/^{$type}:[0-9.E+-]+;\$/", $data ); 254 case 'O' : # object; min length 12 255 return (bool) preg_match( '/^O:[0-9]+:"[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*":[0-9]+:{.*}$/s', $data ); 256 case 's' : # string; min length 7 257 return (bool) preg_match( '/^s:[0-9]+:".*";$/s', $data ); 246 258 } 247 switch ( $badions[1] ) {248 case 'a' :249 case 'O' :250 case 's' :251 if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) )252 return true;253 break;254 case 'b' :255 case 'i' :256 case 'd' :257 if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) )258 return true;259 break;260 }261 259 return false; 262 260 } 263 261