Browse Source

eliminate left-over variable-size arrays

Stefan Siegl 10 years ago
parent
commit
fc89b6ba8c
1 changed files with 6 additions and 3 deletions
  1. 6 3
      v8js_convert.cc

+ 6 - 3
v8js_convert.cc

@@ -471,10 +471,11 @@ static void php_v8js_named_property_enumerator(const v8::PropertyCallbackInfo<v8
 			// prefix enumerated property names with '$' so they can be
 			// dereferenced unambiguously (ie, don't conflict with method
 			// names)
-			char prefixed[key_len + 1];
+			char *prefixed = static_cast<char *>(emalloc(key_len + 1));
 			prefixed[0] = '$';
 			strncpy(prefixed + 1, key, key_len);
 			result->Set(result_len++, V8JS_STRL(prefixed, key_len));
+			efree(prefixed);
 		} else {
 			// even numeric indices are enumerated as strings in JavaScript
 			result->Set(result_len++, V8JS_FLOAT((double) index)->ToString());
@@ -492,12 +493,13 @@ static void php_v8js_invoke_callback(const v8::FunctionCallbackInfo<v8::Value>&
 	v8::Local<v8::Object> self = info.Holder();
 	v8::Local<v8::Function> cb = v8::Local<v8::Function>::Cast(info.Data());
 	int argc = info.Length(), i;
-	v8::Local<v8::Value> argv[argc];
+	v8::Local<v8::Value> *argv = static_cast<v8::Local<v8::Value> *>(alloca(sizeof(v8::Local<v8::Value>) * argc));
 	v8::Local<v8::Value> result;
 
 	V8JS_TSRMLS_FETCH();
 
 	for (i=0; i<argc; i++) {
+		new(&argv[i]) v8::Local<v8::Value>;
 		argv[i] = info[i];
 	}
 
@@ -595,8 +597,9 @@ static void php_v8js_fake_call_impl(const v8::FunctionCallbackInfo<v8::Value>& i
 	// use php_v8js_php_callback to actually execute the method
 	v8::Local<v8::Function> cb = PHP_V8JS_CALLBACK(isolate, method_ptr, tmpl);
 	uint32_t i, argc = args->Length();
-	v8::Local<v8::Value> argv[argc];
+	v8::Local<v8::Value> *argv = static_cast<v8::Local<v8::Value> *>(alloca(sizeof(v8::Local<v8::Value>) * argc));
 	for (i=0; i<argc; i++) {
+		new(&argv[i]) v8::Local<v8::Value>;
 		argv[i] = args->Get(i);
 	}
 	return_value = cb->Call(info.This(), (int) argc, argv);