Skip to content

Commit a894a81

Browse files
committed
More fixes for bug #69152
1 parent 4435b91 commit a894a81

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

Zend/zend_exceptions.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,9 @@ ZEND_METHOD(exception, getTraceAsString)
591591
str = &res;
592592

593593
trace = zend_read_property(default_exception_ce, getThis(), "trace", sizeof("trace")-1, 1 TSRMLS_CC);
594+
if(Z_TYPE_P(trace) != IS_ARRAY) {
595+
RETURN_FALSE;
596+
}
594597
zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC, (apply_func_args_t)_build_trace_string, 3, str, len, &num);
595598

596599
s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 7 + 1);
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
Bug #69152: Type Confusion Infoleak Vulnerability in unserialize()
3+
--FILE--
4+
<?php
5+
$x = unserialize('O:9:"exception":1:{s:16:"'."\0".'Exception'."\0".'trace";s:4:"ryat";}');
6+
echo $x;
7+
$x = unserialize('O:4:"test":1:{s:27:"__PHP_Incomplete_Class_Name";R:1;}');
8+
$x->test();
9+
10+
?>
11+
--EXPECTF--
12+
exception 'Exception' in %s:%d
13+
Stack trace:
14+
#0 {main}
15+
16+
Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "unknown" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line %d

0 commit comments

Comments
 (0)