components/php/php56/patches/CVE-2015-6834_70172.patch
author Michael Nestler <Michael.Nestler@Oracle.COM>
Thu, 19 Nov 2015 22:52:15 -0800
changeset 5116 867d838118ad
permissions -rw-r--r--
22244227 problem in UTILITY/PHP 21577672 problem in UTILITY/PHP 22244239 problem in UTILITY/PHP 22244245 problem in UTILITY/PHP 22244247 problem in UTILITY/PHP 22244253 problem in UTILITY/PHP 22244256 problem in UTILITY/PHP 22244261 problem in UTILITY/PHP 22244265 problem in UTILITY/PHP 22244270 problem in UTILITY/PHP 22244277 problem in UTILITY/PHP 22244286 problem in UTILITY/PHP
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5116
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
     1
# Source: upstream
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
     2
# https://bugs.php.net/bug.php?id=70172
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
     3
# http://git.php.net/?p=php-src.git;a=commit;h=e8429400d40e3c3aa4b22ba701991d698a2f3b2f
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
     4
# Patch to var_unserializer.c regenerated to remove inapplicable #line comments
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
     5
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
     6
From e8429400d40e3c3aa4b22ba701991d698a2f3b2f Mon Sep 17 00:00:00 2001
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
     7
From: Stanislav Malyshev <[email protected]>
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
     8
Date: Mon, 31 Aug 2015 21:28:11 -0700
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
     9
Subject: [PATCH] Fix bug #70172 - Use After Free Vulnerability in
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    10
 unserialize()
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    11
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    12
---
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    13
 ext/standard/tests/serialize/bug70172.phpt | 52 ++++++++++++++++++++
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    14
 ext/standard/var.c                         | 23 +++++++--
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    15
 ext/standard/var_unserializer.c            | 76 ++++++++++++++++--------------
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    16
 ext/standard/var_unserializer.re           | 12 +++--
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    17
 4 files changed, 121 insertions(+), 42 deletions(-)
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    18
 create mode 100644 ext/standard/tests/serialize/bug70172.phpt
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    19
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    20
diff --git a/ext/standard/tests/serialize/bug70172.phpt b/ext/standard/tests/serialize/bug70172.phpt
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    21
new file mode 100644
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    22
index 0000000..0e9d7ed
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    23
--- /dev/null
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    24
+++ b/ext/standard/tests/serialize/bug70172.phpt
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    25
@@ -0,0 +1,52 @@
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    26
+--TEST--
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    27
+Bug #70172 - Use After Free Vulnerability in unserialize()
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    28
+--FILE--
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    29
+<?php
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    30
+class obj implements Serializable {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    31
+	var $data;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    32
+	function serialize() {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    33
+		return serialize($this->data);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    34
+	}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    35
+	function unserialize($data) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    36
+		$this->data = unserialize($data);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    37
+	}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    38
+}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    39
+
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    40
+$fakezval = ptr2str(1122334455);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    41
+$fakezval .= ptr2str(0);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    42
+$fakezval .= "\x00\x00\x00\x00";
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    43
+$fakezval .= "\x01";
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    44
+$fakezval .= "\x00";
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    45
+$fakezval .= "\x00\x00";
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    46
+
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    47
+$inner = 'r:2;';
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    48
+$exploit = 'a:2:{i:0;i:1;i:1;C:3:"obj":'.strlen($inner).':{'.$inner.'}}';
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    49
+
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    50
+$data = unserialize($exploit);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    51
+
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    52
+for ($i = 0; $i < 5; $i++) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    53
+	$v[$i] = $fakezval.$i;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    54
+}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    55
+
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    56
+var_dump($data);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    57
+
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    58
+function ptr2str($ptr)
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    59
+{
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    60
+	$out = '';
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    61
+	for ($i = 0; $i < 8; $i++) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    62
+		$out .= chr($ptr & 0xff);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    63
+		$ptr >>= 8;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    64
+	}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    65
+	return $out;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    66
+}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    67
+?>
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    68
+--EXPECTF--
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    69
+array(2) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    70
+  [0]=>
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    71
+  int(1)
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    72
+  [1]=>
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    73
+  object(obj)#%d (1) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    74
+    ["data"]=>
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    75
+    int(1)
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    76
+  }
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    77
+}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    78
\ No newline at end of file
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    79
diff --git a/ext/standard/var.c b/ext/standard/var.c
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    80
index 7603ff2..33b976f 100644
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    81
--- a/ext/standard/var.c
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    82
+++ b/ext/standard/var.c
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    83
@@ -373,7 +373,7 @@ static int php_array_element_export(zval **zv TSRMLS_DC, int num_args, va_list a
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    84
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    85
 	smart_str_appendc(buf, ',');
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    86
 	smart_str_appendc(buf, '\n');
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    87
-	
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    88
+
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    89
 	return 0;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    90
 }
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    91
 /* }}} */
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    92
@@ -392,7 +392,7 @@ static int php_object_element_export(zval **zv TSRMLS_DC, int num_args, va_list
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    93
 		const char *pname;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    94
 		char *pname_esc;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    95
 		int  pname_esc_len;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    96
-		
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    97
+
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    98
 		zend_unmangle_property_name(hash_key->arKey, hash_key->nKeyLength - 1,
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
    99
 				&class_name, &pname);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   100
 		pname_esc = php_addcslashes(pname, strlen(pname), &pname_esc_len, 0,
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   101
@@ -469,7 +469,7 @@ PHPAPI void php_var_export_ex(zval **struc, int level, smart_str *buf TSRMLS_DC)
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   102
 			buffer_append_spaces(buf, level - 1);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   103
 		}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   104
 		smart_str_appendc(buf, ')');
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   105
-    
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   106
+
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   107
 		break;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   108
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   109
 	case IS_OBJECT:
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   110
@@ -802,7 +802,7 @@ static void php_var_serialize_intern(smart_str *buf, zval *struc, HashTable *var
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   111
 					BG(serialize_lock)++;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   112
 					res = call_user_function_ex(CG(function_table), &struc, &fname, &retval_ptr, 0, 0, 1, NULL TSRMLS_CC);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   113
 					BG(serialize_lock)--;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   114
-                    
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   115
+
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   116
 					if (EG(exception)) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   117
 						if (retval_ptr) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   118
 							zval_ptr_dtor(&retval_ptr);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   119
@@ -951,6 +951,8 @@ PHP_FUNCTION(unserialize)
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   120
 	int buf_len;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   121
 	const unsigned char *p;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   122
 	php_unserialize_data_t var_hash;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   123
+	int oldlevel;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   124
+	zval *old_rval = return_value;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   125
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   126
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, &buf_len) == FAILURE) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   127
 		RETURN_FALSE;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   128
@@ -970,6 +972,19 @@ PHP_FUNCTION(unserialize)
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   129
 		}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   130
 		RETURN_FALSE;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   131
 	}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   132
+	if (return_value != old_rval) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   133
+		/*
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   134
+		 * Terrible hack due to the fact that executor passes us zval *,
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   135
+		 * but unserialize with r/R wants to replace it with another zval *
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   136
+		 */
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   137
+		zval_dtor(old_rval);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   138
+		*old_rval = *return_value;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   139
+		zval_copy_ctor(old_rval);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   140
+		var_push_dtor_no_addref(&var_hash, &return_value);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   141
+		var_push_dtor_no_addref(&var_hash, &old_rval);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   142
+	} else {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   143
+		var_push_dtor(&var_hash, &return_value);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   144
+	}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   145
 	PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   146
 }
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   147
 /* }}} */
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   148
--- var_unserializer.c.orig	Wed Sep  9 13:59:27 2015
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   149
+++ php-5.6.8/ext/standard/var_unserializer.c	Wed Sep  9 14:02:03 2015
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   150
@@ -67,7 +67,7 @@
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   151
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   152
 	var_hash = (*var_hashx)->last_dtor;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   153
 #if VAR_ENTRIES_DBG
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   154
-	fprintf(stderr, "var_push_dtor(%ld): %d\n", var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(rval));
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   155
+	fprintf(stderr, "var_push_dtor(%p, %ld): %d\n", *rval, var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(rval));
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   156
 #endif
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   157
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   158
 	if (!var_hash || var_hash->used_slots == VAR_ENTRIES_MAX) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   159
@@ -92,7 +92,7 @@
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   160
 {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   161
 	var_entries *var_hash = (*var_hashx)->last_dtor;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   162
 #if VAR_ENTRIES_DBG
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   163
-	fprintf(stderr, "var_push_dtor_no_addref(%ld): %d (%d)\n", var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(rval), Z_REFCOUNT_PP(rval));
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   164
+	fprintf(stderr, "var_push_dtor_no_addref(%p, %ld): %d (%d)\n", *rval, var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(rval), Z_REFCOUNT_PP(rval));
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   165
 #endif
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   166
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   167
 	if (!var_hash || var_hash->used_slots == VAR_ENTRIES_MAX) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   168
@@ -171,6 +171,9 @@
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   169
 	
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   170
 	while (var_hash) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   171
 		for (i = 0; i < var_hash->used_slots; i++) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   172
+#if VAR_ENTRIES_DBG
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   173
+    fprintf(stderr, "var_destroy dtor(%p, %ld)\n", var_hash->data[i], Z_REFCOUNT_P(var_hash->data[i]));
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   174
+#endif
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   175
 			zval_ptr_dtor(&var_hash->data[i]);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   176
 		}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   177
 		next = var_hash->next;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   178
@@ -628,6 +631,7 @@
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   179
 	zval **args[1];
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   180
 	zval *arg_func_name;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   181
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   182
+    if (!var_hash) return 0;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   183
 	if (*start == 'C') {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   184
 		custom_object = 1;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   185
 	}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   186
@@ -783,6 +787,7 @@
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   187
 	if (yych != '"') goto yy18;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   188
 	++YYCURSOR;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   189
 	{
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   190
+    if (!var_hash) return 0;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   191
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   192
 	INIT_PZVAL(*rval);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   193
 	
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   194
@@ -813,6 +818,7 @@
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   195
 	long elements = parse_iv(start + 2);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   196
 	/* use iv() not uiv() in order to check data range */
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   197
 	*p = YYCURSOR;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   198
+    if (!var_hash) return 0;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   199
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   200
 	if (elements < 0) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   201
 		return 0;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   202
@@ -1242,7 +1248,7 @@
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   203
 	}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   204
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   205
 	if (*rval != NULL) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   206
-		zval_ptr_dtor(rval);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   207
+		var_push_dtor_no_addref(var_hash, rval);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   208
 	}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   209
 	*rval = *rval_ref;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   210
 	Z_ADDREF_PP(rval);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   211
diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   212
index f02602c..ed82152 100644
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   213
--- a/ext/standard/var_unserializer.re
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   214
+++ b/ext/standard/var_unserializer.re
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   215
@@ -67,7 +67,7 @@ PHPAPI void var_push_dtor(php_unserialize_data_t *var_hashx, zval **rval)
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   216
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   217
 	var_hash = (*var_hashx)->last_dtor;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   218
 #if VAR_ENTRIES_DBG
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   219
-	fprintf(stderr, "var_push_dtor(%ld): %d\n", var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(rval));
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   220
+	fprintf(stderr, "var_push_dtor(%p, %ld): %d\n", *rval, var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(rval));
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   221
 #endif
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   222
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   223
 	if (!var_hash || var_hash->used_slots == VAR_ENTRIES_MAX) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   224
@@ -98,7 +98,7 @@ PHPAPI void var_push_dtor_no_addref(php_unserialize_data_t *var_hashx, zval **rv
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   225
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   226
     var_hash = (*var_hashx)->last_dtor;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   227
 #if VAR_ENTRIES_DBG
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   228
-	fprintf(stderr, "var_push_dtor_no_addref(%ld): %d (%d)\n", var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(rval), Z_REFCOUNT_PP(rval));
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   229
+	fprintf(stderr, "var_push_dtor_no_addref(%p, %ld): %d (%d)\n", *rval, var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(rval), Z_REFCOUNT_PP(rval));
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   230
 #endif
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   231
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   232
 	if (!var_hash || var_hash->used_slots == VAR_ENTRIES_MAX) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   233
@@ -177,6 +177,9 @@ PHPAPI void var_destroy(php_unserialize_data_t *var_hashx)
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   234
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   235
 	while (var_hash) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   236
 		for (i = 0; i < var_hash->used_slots; i++) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   237
+#if VAR_ENTRIES_DBG
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   238
+    fprintf(stderr, "var_destroy dtor(%p, %ld)\n", var_hash->data[i], Z_REFCOUNT_P(var_hash->data[i]));
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   239
+#endif
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   240
 			zval_ptr_dtor(&var_hash->data[i]);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   241
 		}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   242
 		next = var_hash->next;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   243
@@ -501,7 +504,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   244
 	}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   245
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   246
 	if (*rval != NULL) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   247
-		zval_ptr_dtor(rval);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   248
+		var_push_dtor_no_addref(var_hash, rval);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   249
 	}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   250
 	*rval = *rval_ref;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   251
 	Z_ADDREF_PP(rval);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   252
@@ -660,6 +663,7 @@ use_double:
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   253
 	long elements = parse_iv(start + 2);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   254
 	/* use iv() not uiv() in order to check data range */
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   255
 	*p = YYCURSOR;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   256
+    if (!var_hash) return 0;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   257
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   258
 	if (elements < 0) {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   259
 		return 0;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   260
@@ -677,6 +681,7 @@ use_double:
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   261
 }
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   262
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   263
 "o:" iv ":" ["] {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   264
+    if (!var_hash) return 0;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   265
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   266
 	INIT_PZVAL(*rval);
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   267
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   268
@@ -699,6 +704,7 @@ object ":" uiv ":" ["]	{
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   269
 	zval **args[1];
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   270
 	zval *arg_func_name;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   271
 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   272
+    if (!var_hash) return 0;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   273
 	if (*start == 'C') {
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   274
 		custom_object = 1;
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   275
 	}
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   276
-- 
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   277
2.1.4
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   278
867d838118ad 22244227 problem in UTILITY/PHP
Michael Nestler <Michael.Nestler@Oracle.COM>
parents:
diff changeset
   279