From 062aa41ba002684101fe5dd526c161c9afa6085d Mon Sep 17 00:00:00 2001 From: Joey3000 Date: Tue, 16 Feb 2016 19:41:41 +0100 Subject: [PATCH] Fixing Uncaught Error: Cannot use object of type test as array Refs https://github.com/phpseclib/phpseclib/pull/934/files#r53035721 --- phpseclib/Crypt/Random.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/phpseclib/Crypt/Random.php b/phpseclib/Crypt/Random.php index 2a5b8d94..f28b180a 100644 --- a/phpseclib/Crypt/Random.php +++ b/phpseclib/Crypt/Random.php @@ -275,17 +275,19 @@ if (!function_exists('phpseclib_safe_serialize')) { if (is_object($arr)) { return ''; } + // prevent circular array recursion + if (isset($arr['__phpseclib_marker'])) { + return ''; + } if (!is_array($arr)) { return serialize($arr); } $safearr = array(); $arr['__phpseclib_marker'] = true; foreach (array_keys($arr) as $key) { - // do not recurse on: - // - the '__phpseclib_marker' key itself - // - a circular reference (marked with that key) - if ($key !== '__phpseclib_marker' && !isset($arr[$key]['__phpseclib_marker'])) { - $safearr[$key] = is_array($arr[$key]) ? phpseclib_safe_serialize($arr[$key]) : $arr[$key]; + // do not recurse on the '__phpseclib_marker' key itself, for smaller memory usage + if ($key !== '__phpseclib_marker') { + $safearr[$key] = phpseclib_safe_serialize($arr[$key]); } } unset($arr['__phpseclib_marker']);