Selaa lähdekoodia

Since ArrayBuffer has InternalFieldCount set to 2 by default, added !isArrayBuffer() and !isArrayBufferView() to ensure that is PHP object

Christiano Becker 2 vuotta sitten
vanhempi
commit
752cbdb8ac
3 muutettua tiedostoa jossa 5 lisäystä ja 3 poistoa
  1. 1 1
      v8js_convert.cc
  2. 2 1
      v8js_object_export.cc
  3. 2 1
      v8js_v8.cc

+ 1 - 1
v8js_convert.cc

@@ -260,7 +260,7 @@ int v8js_to_zval(v8::Local<v8::Value> jsValue, zval *return_value, int flags, v8
 		}
 
 		// if this is a wrapped PHP object, then just unwrap it.
-		if (self->InternalFieldCount() == 2) {
+		if ((self->InternalFieldCount() == 2) && !jsValue->IsArrayBufferView() && !jsValue->IsArrayBuffer()) {
 			zend_object *object = reinterpret_cast<zend_object *>(self->GetAlignedPointerFromInternalField(1));
 			zval zval_object;
 			ZVAL_OBJ(&zval_object, object);

+ 2 - 1
v8js_object_export.cc

@@ -141,7 +141,8 @@ static void v8js_call_php_func(zend_object *object, zend_function *method_ptr, c
 		{
 			v8::Local<v8::Object> param_object;
 
-			if (info[i]->IsObject() && info[i]->ToObject(v8_context).ToLocal(&param_object) && param_object->InternalFieldCount() == 2)
+			if (info[i]->IsObject() && info[i]->ToObject(v8_context).ToLocal(&param_object) && param_object->InternalFieldCount() == 2
+					&& !param_object->IsArrayBufferView() && !param_object->IsArrayBuffer())
 			{
 				/* This is a PHP object, passed to JS and back. */
 				zend_object *object = reinterpret_cast<zend_object *>(param_object->GetAlignedPointerFromInternalField(1));

+ 2 - 1
v8js_v8.cc

@@ -325,7 +325,8 @@ int v8js_get_properties_hash(v8::Local<v8::Value> jsValue, HashTable *retval, in
 		ZVAL_UNDEF(&value);
 
 		v8::Local<v8::Object> jsValObject;
-		if (jsVal->IsObject() && jsVal->ToObject(v8_context).ToLocal(&jsValObject) && jsValObject->InternalFieldCount() == 2) {
+		if (jsVal->IsObject() && !jsVal->IsArrayBufferView() && !jsVal->IsArrayBuffer()
+			&& jsVal->ToObject(v8_context).ToLocal(&jsValObject) && (jsValObject->InternalFieldCount() == 2)) {
 			/* This is a PHP object, passed to JS and back. */
 			zend_object *object = reinterpret_cast<zend_object *>(jsValObject->GetAlignedPointerFromInternalField(1));
 			ZVAL_OBJ(&value, object);