瀏覽代碼

- Fixed crash bug in setting v8js.flags directive using php -d..

Jani Taskinen 14 年之前
父節點
當前提交
e1b8b8c1f5
共有 4 個文件被更改,包括 84 次插入118 次删除
  1. 73 37
      package.xml
  2. 0 73
      package2.xml
  3. 1 1
      php_v8js_macros.h
  4. 10 7
      v8js.cc

+ 73 - 37
package.xml

@@ -1,41 +1,77 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
-<package version="1.0" packagerversion="1.9.1">
+<?xml version="1.0" encoding="UTF-8"?>
+<package packagerversion="1.4.11" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
+http://pear.php.net/dtd/tasks-1.0.xsd
+http://pear.php.net/dtd/package-2.0
+http://pear.php.net/dtd/package-2.0.xsd">
  <name>v8js</name>
+ <channel>pecl.php.net</channel>
  <summary>V8 Javascript Engine for PHP</summary>
- <description>This extension embeds the Google&apos;s V8 Javascript Engine into PHP.
+ <description>
+  This extension embeds the Google&apos;s V8 Javascript Engine into PHP.
  </description>
- <maintainers>
-  <maintainer>
-   <user>jani</user>
-   <name>Jani Taskinen</name>
-   <email>[email protected]</email>
-   <role>lead</role>
-  </maintainer>
-  </maintainers>
- <release>
-  <version>0.1.0</version>
-  <date>2010-12-30</date>
-  <license>PHP</license>
-  <state>beta</state>
-  <notes>- Initial PECL release
-  </notes>
-  <deps>
-   <dep type="php" rel="ge" version="5.3.3"/>
-  </deps>
-  <configureoptions>
-   <configureoption name="with-v8js" default="autodetect" prompt="Please provide the installation prefix of libv8"/>
-  </configureoptions>
-  <filelist>
-   <file role="src" name="config.m4"/>
-   <file role="doc" name="CREDITS"/>
-   <file role="src" name="Makefile.frag"/>
-   <file role="src" name="php_v8js.h"/>
-   <file role="src" name="php_v8js_macros.h"/>
-   <file role="src" name="v8js.cc"/>
-   <file role="src" name="v8js_convert.cc"/>
-   <file role="src" name="v8js_methods.cc"/>
-   <file role="src" name="v8js_variables.cc"/>
-  </filelist>
- </release>
+ <lead>
+  <name>Jani Taskinen</name>
+  <user>jani</user>
+  <email>[email protected]</email>
+  <active>yes</active>
+ </lead>
+ <date>2010-12-30</date>
+ <time>12:12:12</time>
+ <version>
+  <release>0.1.0</release>
+  <api>0.1.0</api>
+ </version>
+ <stability>
+  <release>beta</release>
+  <api>beta</api>
+ </stability>
+ <license uri="http://www.php.net/license">PHP</license>
+ <notes>- Initial PECL release
+ </notes>
+ <contents>
+  <dir name="/">
+   <file name="CREDITS" role="doc" />
+   <file name="config.m4" role="src" />
+   <file name="Makefile.frag" role="src" />
+   <file name="v8js.cc" role="src" />
+   <file name="v8js_convert.cc" role="src" />
+   <file name="v8js_methods.cc" role="src" />
+   <file name="v8js_variables.cc" role="src" />
+   <file name="php_v8js.h" role="src" />
+   <file name="php_v8js_macros.h" role="src" />
+  </dir> <!-- / -->
+ </contents>
+ <dependencies>
+  <required>
+   <php>
+    <min>5.3.3</min>
+   </php>
+   <pearinstaller>
+    <min>1.4.0</min>
+   </pearinstaller>
+  </required>
+ </dependencies>
+ <providesextension>v8js</providesextension>
+ <extsrcrelease>
+  <configureoption default="autodetect" name="with-v8js" prompt="Please provide the installation prefix of libv8" />
+ </extsrcrelease>
+ <changelog>
+  <release>
+   <version><release>0.1.1</release><api>0.1.1</api></version>
+   <stability><release>beta</release><api>beta</api></stability>
+   <date>2010-12-31</date>
+   <notes>
+- Fixed crash bug in setting v8.flags ini directive.
+- Added notice to registerExtension() if trying to use it when V8 is already initialized.
+   </notes>
+  </release>
+  <release>
+   <version><release>0.1.0</release><api>0.1.0</api></version>
+   <stability><release>beta</release><api>beta</api></stability>
+   <date>2010-12-30</date>
+   <notes>
+- Initial PECL release.
+   </notes>
+  </release>
+ </changelog>
 </package>

+ 0 - 73
package2.xml

@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package packagerversion="1.4.11" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
-http://pear.php.net/dtd/tasks-1.0.xsd
-http://pear.php.net/dtd/package-2.0
-http://pear.php.net/dtd/package-2.0.xsd">
- <name>v8js</name>
- <channel>pecl.php.net</channel>
- <summary>V8 Javascript Engine for PHP</summary>
- <description>
-  This extension embeds the Google&apos;s V8 Javascript Engine into PHP.
- </description>
- <lead>
-  <name>Jani Taskinen</name>
-  <user>jani</user>
-  <email>[email protected]</email>
-  <active>yes</active>
- </lead>
- <date>2010-12-30</date>
- <time>12:12:12</time>
- <version>
-  <release>0.1.0</release>
-  <api>0.1.0</api>
- </version>
- <stability>
-  <release>beta</release>
-  <api>beta</api>
- </stability>
- <license uri="http://www.php.net/license">PHP</license>
- <notes>- Initial PECL release
- </notes>
- <contents>
-  <dir name="/">
-   <file name="CREDITS" role="doc" />
-   <file name="config.m4" role="src" />
-   <file name="Makefile.frag" role="src" />
-   <file name="v8js.cc" role="src" />
-   <file name="v8js_convert.cc" role="src" />
-   <file name="v8js_methods.cc" role="src" />
-   <file name="v8js_variables.cc" role="src" />
-   <file name="php_v8js.h" role="src" />
-   <file name="php_v8js_macros.h" role="src" />
-  </dir> <!-- / -->
- </contents>
- <dependencies>
-  <required>
-   <php>
-    <min>5.3.3</min>
-   </php>
-   <pearinstaller>
-    <min>1.4.0</min>
-   </pearinstaller>
-  </required>
- </dependencies>
- <providesextension>v8js</providesextension>
- <extsrcrelease>
-  <configureoption default="autodetect" name="with-v8js" prompt="Please provide the installation prefix of libv8" />
- </extsrcrelease>
- <changelog>
-  <release>
-   <version>
-    <release>0.1.0</release>
-    <api>0.1.0</api>
-   </version>
-   <stability>
-    <release>beta</release>
-    <api>beta</api>
-   </stability>
-   <date>2010-12-30</date>
-   <notes>- Initial PECL release.
-   </notes>
-  </release>
- </changelog>
-</package>

+ 1 - 1
php_v8js_macros.h

@@ -24,7 +24,7 @@
 #include <v8.h>
 
 /* V8Js Version */
-#define V8JS_VERSION "0.1.0"
+#define V8JS_VERSION "0.1.1"
 
 /* Helper macros */
 #define V8JS_SYM(v)			v8::String::NewSymbol(v, sizeof(v) - 1)

+ 10 - 7
v8js.cc

@@ -49,7 +49,7 @@ ZEND_BEGIN_MODULE_GLOBALS(v8js)
 	int disposed_contexts; /* Disposed contexts since last time V8 did GC */
 
 	/* Ini globals */
-	zval *v8_flags; /* V8 command line flags */
+	char *v8_flags; /* V8 command line flags */
 	int max_disposed_contexts; /* Max disposed context allowed before forcing V8 GC */
 ZEND_END_MODULE_GLOBALS(v8js)
 
@@ -81,24 +81,22 @@ static ZEND_INI_MH(v8js_OnUpdateV8Flags) /* {{{ */
 {
 	if (new_value) {
 		if (V8JSG(v8_flags)) {
-			zval_ptr_dtor(&V8JSG(v8_flags));
+			free(V8JSG(v8_flags));
 			V8JSG(v8_flags) = NULL;
 		}
 		if (!new_value[0]) {
 			return FAILURE;
 		}
+		V8JSG(v8_flags) = zend_strndup(new_value, new_value_length);
 	}
 
-	MAKE_STD_ZVAL(V8JSG(v8_flags));
-	ZVAL_STRINGL(V8JSG(v8_flags), new_value, new_value_length, 1);
-
 	return SUCCESS;
 }
 /* }}} */
 
 ZEND_INI_BEGIN() /* {{{ */
 	ZEND_INI_ENTRY("v8js.max_disposed_contexts", "25", ZEND_INI_ALL, v8js_OnUpdateMaxDisposedContexts)
-	ZEND_INI_ENTRY("v8js.flags", "", ZEND_INI_ALL, v8js_OnUpdateV8Flags)
+	ZEND_INI_ENTRY("v8js.flags", NULL, ZEND_INI_ALL, v8js_OnUpdateV8Flags)
 ZEND_INI_END()
 /* }}} */
 
@@ -535,7 +533,7 @@ static void php_v8js_init(TSRMLS_D) /* {{{ */
 
 	/* Set V8 command line flags (must be done before V8::Initialize()!) */
 	if (V8JSG(v8_flags)) {
-		v8::V8::SetFlagsFromString(Z_STRVAL_P(V8JSG(v8_flags)), Z_STRLEN_P(V8JSG(v8_flags)));
+		v8::V8::SetFlagsFromString(V8JSG(v8_flags), strlen(V8JSG(v8_flags)));
 	}
 
 	/* Initialize V8 */
@@ -1195,6 +1193,11 @@ static PHP_MSHUTDOWN_FUNCTION(v8js)
 		V8JSG(extensions) = NULL;
 	}
 
+	if (V8JSG(v8_flags)) {
+		free(V8JSG(v8_flags));
+		V8JSG(v8_flags) = NULL;
+	}
+
 	return SUCCESS;
 }
 /* }}} */