note 71846 added to function.unserialize
| From: | doubleatdumpitdotcom at osu1 dot php dot net | Date: | Tue, 19 Dec 2006 13:09:24 +0000 |
| Subject: | note 71846 added to function.unserialize | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-120766@lists.php.net to get a copy of this message | ||
This little function will check whether the serialized string is well formed.
PHP < 6 because i'd heard changes will be made in this php-intern function,
maybe it could be edited easy for it.
<?php
function wd_check_serialization( $string, &$errmsg )
{
$str = 's';
$array = 'a';
$integer = 'i';
$any = '[^}]*?';
$count = '\d+';
$content = '"(?:\\\";|.)*?";';
$open_tag = '\{';
$close_tag = '\}';
$parameter = "($str|$array|$integer|$any):($count)" .
"(?:[:]($open_tag|$content)|[;])";
$preg = "/$parameter|($close_tag)/";
if( !preg_match_all( $preg, $string, $matches ) )
{
$errmsg = 'not a serialized string';
return false;
}
$open_arrays = 0;
foreach( $matches[1] AS $key => $value )
{
if( !empty( $value ) && ( $value != $array xor $value != $str xor $value != $integer ) )
{
$errmsg = 'undefined datatype';
return false;
}
if( $value == $array )
{
$open_arrays++;
if( $matches[3][$key] != '{' )
{
$errmsg = 'open tag expected';
return false;
}
}
if( $value == '' )
{
if( $matches[4][$key] != '}' )
{
$errmsg = 'close tag expected';
return false;
}
$open_arrays--;
}
if( $value == $str )
{
$aVar = ltrim( $matches[3][$key], '"' );
$aVar = rtrim( $aVar, '";' );
if( strlen( $aVar ) != $matches[2][$key] )
{
$errmsg = 'stringlen for string not match';
return false;
}
}
if( $value == $integer )
{
if( !empty( $matches[3][$key] ) )
{
$errmsg = 'unexpected data';
return false;
}
if( !is_integer( (int)$matches[2][$key] ) )
{
$errmsg = 'integer expected';
return false;
}
}
}
if( $open_arrays != 0 )
{
$errmsg = 'wrong setted arrays';
return false;
}
return true;
}
?>
----
Server IP: 217.13.201.10
Probable Submitter: 88.68.38.97
----
Manual Page -- http://www.php.net/manual/en/function.unserialize.php
Edit -- https://master.php.net/note/edit/71846
Del: integrated -- https://master.php.net/note/delete/71846/integrated
Del: useless -- https://master.php.net/note/delete/71846/useless
Del: bad code -- https://master.php.net/note/delete/71846/bad+code
Del: spam -- https://master.php.net/note/delete/71846/spam
Del: non-english -- https://master.php.net/note/delete/71846/non-english
Del: in docs -- https://master.php.net/note/delete/71846/in+docs
Del: other reasons-- https://master.php.net/note/delete/71846
Reject -- https://master.php.net/note/reject/71846
Search -- https://master.php.net/manage/user-notes.php