浏览代码

Handle access of undeclared properties

Stefan Siegl 9 年之前
父节点
当前提交
fcb056b5a5
共有 1 个文件被更改,包括 9 次插入9 次删除
  1. 9 9
      v8js_object_export.cc

+ 9 - 9
v8js_object_export.cc

@@ -594,9 +594,9 @@ inline v8::Local<v8::Value> v8js_named_property_callback(v8::Local<v8::String> p
 			/* Nope, not a method -- must be a (case-sensitive) property */
 			/* Nope, not a method -- must be a (case-sensitive) property */
 			zend_property_info *property_info = zend_get_property_info(ce, Z_STR(zname), 1 TSRMLS_CC);
 			zend_property_info *property_info = zend_get_property_info(ce, Z_STR(zname), 1 TSRMLS_CC);
 
 
-			if(property_info &&
-			   property_info != ZEND_WRONG_PROPERTY_INFO &&
-			   property_info->flags & ZEND_ACC_PUBLIC) {
+			if(!property_info ||
+			   (property_info != ZEND_WRONG_PROPERTY_INFO &&
+				property_info->flags & ZEND_ACC_PUBLIC)) {
 				zval *property_val = zend_read_property(NULL, &zobject, V8JS_CONST name, name_len, true, &php_value TSRMLS_CC);
 				zval *property_val = zend_read_property(NULL, &zobject, V8JS_CONST name, name_len, true, &php_value TSRMLS_CC);
 				// special case uninitialized_zval_ptr and return an empty value
 				// special case uninitialized_zval_ptr and return an empty value
 				// (indicating that we don't intercept this property) if the
 				// (indicating that we don't intercept this property) if the
@@ -631,9 +631,9 @@ inline v8::Local<v8::Value> v8js_named_property_callback(v8::Local<v8::String> p
 			else {
 			else {
 				zend_property_info *property_info = zend_get_property_info(ce, Z_STR(zname), 1 TSRMLS_CC);
 				zend_property_info *property_info = zend_get_property_info(ce, Z_STR(zname), 1 TSRMLS_CC);
 
 
-				if(property_info &&
-				   property_info != ZEND_WRONG_PROPERTY_INFO &&
-				   property_info->flags & ZEND_ACC_PUBLIC) {
+				if(!property_info ||
+				   (property_info != ZEND_WRONG_PROPERTY_INFO &&
+					property_info->flags & ZEND_ACC_PUBLIC)) {
 					zend_update_property(scope, &zobject, V8JS_CONST name, name_len, &php_value TSRMLS_CC);
 					zend_update_property(scope, &zobject, V8JS_CONST name, name_len, &php_value TSRMLS_CC);
 					ret_value = set_value;
 					ret_value = set_value;
 				}
 				}
@@ -664,9 +664,9 @@ inline v8::Local<v8::Value> v8js_named_property_callback(v8::Local<v8::String> p
 			} else {
 			} else {
 				zend_property_info *property_info = zend_get_property_info(ce, Z_STR(zname), 1 TSRMLS_CC);
 				zend_property_info *property_info = zend_get_property_info(ce, Z_STR(zname), 1 TSRMLS_CC);
 
 
-				if(property_info &&
-				   property_info != ZEND_WRONG_PROPERTY_INFO &&
-				   property_info->flags & ZEND_ACC_PUBLIC) {
+				if(!property_info ||
+				   (property_info != ZEND_WRONG_PROPERTY_INFO &&
+					property_info->flags & ZEND_ACC_PUBLIC)) {
 					h->unset_property(&zobject, &zname, NULL TSRMLS_CC);
 					h->unset_property(&zobject, &zname, NULL TSRMLS_CC);
 					ret_value = V8JS_TRUE();
 					ret_value = V8JS_TRUE();
 				}
 				}