@@ -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 */
338338static 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 );
0 commit comments