瀏覽代碼

Don't export V8Js methods even if overwritten

Stefan Siegl 9 年之前
父節點
當前提交
d438624a3d
共有 2 個文件被更改,包括 46 次插入2 次删除
  1. 44 0
      tests/issue_183_004.phpt
  2. 2 2
      v8js_class.cc

+ 44 - 0
tests/issue_183_004.phpt

@@ -0,0 +1,44 @@
+--TEST--
+Test V8::executeString() : Method access on derived classes (overridden V8Js methods)
+--SKIPIF--
+<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
+--FILE--
+<?php
+
+class Foo extends \V8Js
+{
+    public function hello()
+    {
+        print("Hello World\n");
+    }
+
+    public function executeString($script, $identifier = NULL, $flags = NULL, $time_limit = NULL, $memory_limit = NULL)
+    {
+        var_dump("executeString");
+        return parent::executeString($script);
+    }
+}
+
+$JS = <<< EOT
+var_dump(typeof PHP.hello);
+var_dump(typeof PHP.executeString);
+
+try {
+    PHP.executeString('print("blar")');
+}
+catch(e) {
+    var_dump('caught');
+}
+EOT;
+
+$v8 = new Foo();
+$v8->executeString($JS);
+
+?>
+===EOF===
+--EXPECTF--
+string(13) "executeString"
+string(8) "function"
+string(9) "undefined"
+string(6) "caught"
+===EOF===

+ 2 - 2
v8js_class.cc

@@ -531,7 +531,7 @@ static PHP_METHOD(V8Js, __construct)
 
 		const zend_function_entry *fe;
 		for (fe = v8js_methods; fe->fname; fe ++) {
-			if (fe->fname == method_ptr->common.function_name) {
+			if (strcmp(fe->fname, method_ptr->common.function_name) == 0) {
 				break;
 			}
 		}
@@ -1186,7 +1186,7 @@ static void v8js_unset_property(zval *object, zval *member ZEND_HASH_KEY_DC TSRM
 	/* Global PHP JS object */
 	v8::Local<v8::String> object_name_js = v8::Local<v8::String>::New(isolate, c->object_name);
 	v8::Local<v8::Object> jsobj = V8JS_GLOBAL(isolate)->Get(object_name_js)->ToObject();
-	
+
 	/* Delete value from PHP JS object */
 	jsobj->Delete(V8JS_SYML(Z_STRVAL_P(member), Z_STRLEN_P(member)));