Просмотр исходного кода

Merge pull request #415 from stesie/fix-ftbfs-v8-extension

Fix double-free related to std::unique_ptr use
Stefan Siegl 5 лет назад
Родитель
Сommit
6ab1106201
4 измененных файлов с 8 добавлено и 10 удалено
  1. 3 3
      .travis.yml
  2. 1 1
      Makefile.travis
  3. 1 1
      README.Linux.md
  4. 3 5
      v8js_class.cc

+ 3 - 3
.travis.yml

@@ -5,11 +5,11 @@ services:
   - docker
 
 env:
-  - V8VER=7.1
+  - V8VER=7.5
     PHPVER=7.0
-  - V8VER=7.1
+  - V8VER=7.5
     PHPVER=7.1
-  - V8VER=7.1
+  - V8VER=7.5
     PHPVER=7.2
 
 script: make -f Makefile.travis test

+ 1 - 1
Makefile.travis

@@ -1,5 +1,5 @@
 # Configure and build scripts for travis CI system
-V8VER ?= 7.1
+V8VER ?= 7.5
 
 IMAGENAME ?= v8js-test
 

+ 1 - 1
README.Linux.md

@@ -55,7 +55,7 @@ git checkout 6.4.388.18
 gclient sync
 
 # Setup GN
-tools/dev/v8gen.py -vv x64.release -- is_component_build=true
+tools/dev/v8gen.py -vv x64.release -- is_component_build=true use_custom_libcxx=false
 
 # Build
 ninja -C out.gn/x64.release/

+ 3 - 5
v8js_class.cc

@@ -67,7 +67,6 @@ struct v8js_jsext {
 	int deps_count;
 	zend_string *name;
 	zend_string *source;
-	v8::Extension *extension;
 };
 /* }}} */
 
@@ -272,7 +271,6 @@ static void v8js_jsext_free_storage(v8js_jsext *jsext) /* {{{ */
 	if (jsext->deps) {
 		v8js_free_ext_strarr(jsext->deps, jsext->deps_count);
 	}
-	delete jsext->extension;
 
 	// Free the persisted non-interned strings we allocated.
 	if (jsext->name) {
@@ -1054,7 +1052,7 @@ static int v8js_register_extension(zend_string *name, zend_string *source, zval
 		zend_hash_copy(jsext->deps_ht, Z_ARRVAL_P(deps_arr), v8js_persistent_zval_ctor);
 	}
 
-	jsext->extension = new v8::Extension(ZSTR_VAL(jsext->name), ZSTR_VAL(jsext->source), jsext->deps_count, jsext->deps);
+	v8::Extension *extension = new v8::Extension(ZSTR_VAL(jsext->name), ZSTR_VAL(jsext->source), jsext->deps_count, jsext->deps);
 
 	if (!zend_hash_add_ptr(v8js_process_globals.extensions, jsext->name, jsext)) {
 		v8js_jsext_free_storage(jsext);
@@ -1068,8 +1066,8 @@ static int v8js_register_extension(zend_string *name, zend_string *source, zval
 	v8js_process_globals.lock.unlock();
 #endif
 
-	jsext->extension->set_auto_enable(auto_enable ? true : false);
-	v8::RegisterExtension(jsext->extension);
+	extension->set_auto_enable(auto_enable ? true : false);
+	v8::RegisterExtension(std::unique_ptr<v8::Extension>(extension));
 
 	return SUCCESS;
 }