Skip to content

Commit 930b450

Browse files
committed
refcount on snapshot_blob zval
1 parent 606eb5a commit 930b450

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

v8js_class.cc

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,8 @@ static void v8js_free_storage(void *object TSRMLS_DC) /* {{{ */
208208
c->modules_base.~vector();
209209

210210
#if PHP_V8_API_VERSION >= 4003007
211-
if (c->snapshot_blob.data) {
212-
efree((void*)c->snapshot_blob.data);
211+
if (c->zval_snapshot_blob) {
212+
zval_ptr_dtor(&c->zval_snapshot_blob);
213213
}
214214
#endif
215215

@@ -337,13 +337,14 @@ static void v8js_fatal_error_handler(const char *location, const char *message)
337337
__construct for V8Js */
338338
static PHP_METHOD(V8Js, __construct)
339339
{
340-
char *object_name = NULL, *class_name = NULL, *snapshot_blob = NULL;
341-
int object_name_len = 0, free = 0, snapshot_blob_len = 0;
340+
char *object_name = NULL, *class_name = NULL;
341+
int object_name_len = 0, free = 0;
342342
zend_uint class_name_len = 0;
343343
zend_bool report_uncaught = 1;
344344
zval *vars_arr = NULL, *exts_arr = NULL;
345345
const char **exts = NULL;
346346
int exts_count = 0;
347+
zval *snapshot_blob = NULL;
347348

348349
v8js_ctx *c = (v8js_ctx *) zend_object_store_get_object(getThis() TSRMLS_CC);
349350

@@ -352,7 +353,7 @@ static PHP_METHOD(V8Js, __construct)
352353
return;
353354
}
354355

355-
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|saabs", &object_name, &object_name_len, &vars_arr, &exts_arr, &report_uncaught, &snapshot_blob, &snapshot_blob_len) == FAILURE) {
356+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|saabz", &object_name, &object_name_len, &vars_arr, &exts_arr, &report_uncaught, &snapshot_blob) == FAILURE){
356357
return;
357358
}
358359

@@ -373,10 +374,17 @@ static PHP_METHOD(V8Js, __construct)
373374
#endif
374375

375376
new (&c->snapshot_blob) v8::StartupData();
376-
if (snapshot_blob && snapshot_blob_len) {
377-
c->snapshot_blob.data = snapshot_blob;
378-
c->snapshot_blob.raw_size = snapshot_blob_len;
379-
c->create_params.snapshot_blob = &c->snapshot_blob;
377+
if (snapshot_blob) {
378+
if (Z_TYPE_P(snapshot_blob) == IS_STRING) {
379+
c->zval_snapshot_blob = snapshot_blob;
380+
Z_ADDREF_P(c->zval_snapshot_blob);
381+
382+
c->snapshot_blob.data = Z_STRVAL_P(snapshot_blob);
383+
c->snapshot_blob.raw_size = Z_STRLEN_P(snapshot_blob);
384+
c->create_params.snapshot_blob = &c->snapshot_blob;
385+
} else {
386+
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument snapshot_blob expected to be of string type");
387+
}
380388
}
381389

382390
c->isolate = v8::Isolate::New(c->create_params);

v8js_class.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ struct v8js_ctx {
7171

7272
#if PHP_V8_API_VERSION >= 4003007
7373
v8::Isolate::CreateParams create_params;
74+
zval *zval_snapshot_blob;
7475
v8::StartupData snapshot_blob;
7576
#endif
7677

0 commit comments

Comments
 (0)