@@ -380,7 +380,7 @@ int meminfo_visit_item(const char * item_label, HashTable *visited_items)
380
380
void meminfo_hash_dump (php_stream * stream , HashTable * ht , zend_bool is_object , HashTable * visited_items , int * first_element )
381
381
{
382
382
zval * * zval ;
383
- char * key ;
383
+ char * key , * char_buf ; ;
384
384
385
385
HashPosition pos ;
386
386
ulong num_key ;
@@ -406,10 +406,13 @@ void meminfo_hash_dump(php_stream *stream, HashTable *ht, zend_bool is_object, H
406
406
if (is_object ) {
407
407
const char * property_name , * class_name ;
408
408
int mangled = zend_unmangle_property_name (key , key_len - 1 , & class_name , & property_name );
409
-
410
- php_stream_printf (stream TSRMLS_CC , " \"%s\":\"%p\"" , meminfo_escape_for_json (property_name ), * zval );
409
+ char_buf = meminfo_escape_for_json (property_name );
410
+ php_stream_printf (stream TSRMLS_CC , " \"%s\":\"%p\"" , char_buf , * zval );
411
+ efree (char_buf );
411
412
} else {
412
- php_stream_printf (stream TSRMLS_CC , " \"%s\":\"%p\"" , meminfo_escape_for_json (key ), * zval );
413
+ char_buf = meminfo_escape_for_json (key );
414
+ php_stream_printf (stream TSRMLS_CC , " \"%s\":\"%p\"" , char_buf , * zval );
415
+ efree (char_buf );
413
416
}
414
417
415
418
break ;
@@ -432,6 +435,7 @@ void meminfo_hash_dump(php_stream *stream, HashTable *ht, zend_bool is_object, H
432
435
void meminfo_zval_dump (php_stream * stream , char * frame_label , char * symbol_name , zval * zv , HashTable * visited_items , int * first_element )
433
436
{
434
437
char zval_id [16 ];
438
+ char * char_buf ;
435
439
sprintf (zval_id , "%p" , zv );
436
440
437
441
if (meminfo_visit_item (zval_id , visited_items )) {
@@ -450,10 +454,14 @@ void meminfo_zval_dump(php_stream * stream, char * frame_label, char * symbol_na
450
454
451
455
if (frame_label ) {
452
456
if (symbol_name ) {
453
- php_stream_printf (stream TSRMLS_CC , " \"symbol_name\" : \"%s\",\n" , meminfo_escape_for_json (symbol_name ));
457
+ char_buf = meminfo_escape_for_json (symbol_name );
458
+ php_stream_printf (stream TSRMLS_CC , " \"symbol_name\" : \"%s\",\n" , char_buf );
459
+ efree (char_buf );
454
460
}
455
461
php_stream_printf (stream TSRMLS_CC , " \"is_root\" : true,\n" );
456
- php_stream_printf (stream TSRMLS_CC , " \"frame\" : \"%s\"\n" , meminfo_escape_for_json (frame_label ));
462
+ char_buf = meminfo_escape_for_json (frame_label );
463
+ php_stream_printf (stream TSRMLS_CC , " \"frame\" : \"%s\"\n" , char_buf );
464
+ efree (char_buf );
457
465
} else {
458
466
php_stream_printf (stream TSRMLS_CC , " \"is_root\" : false\n" );
459
467
}
@@ -466,7 +474,9 @@ void meminfo_zval_dump(php_stream * stream, char * frame_label, char * symbol_na
466
474
int is_temp ;
467
475
468
476
php_stream_printf (stream TSRMLS_CC , ",\n" );
469
- php_stream_printf (stream TSRMLS_CC , " \"class\" : \"%s\",\n" , meminfo_escape_for_json (meminfo_get_classname (zv -> value .obj .handle )));
477
+ char_buf = meminfo_escape_for_json (meminfo_get_classname (zv -> value .obj .handle ));
478
+ php_stream_printf (stream TSRMLS_CC , " \"class\" : \"%s\",\n" , char_buf );
479
+ efree (char_buf );
470
480
php_stream_printf (stream TSRMLS_CC , " \"object_handle\" : \"%d\",\n" , zv -> value .obj .handle );
471
481
472
482
properties = Z_OBJDEBUG_P (zv , is_temp );
@@ -486,6 +496,7 @@ void meminfo_zval_dump(php_stream * stream, char * frame_label, char * symbol_na
486
496
php_stream_printf (stream TSRMLS_CC , "\n" );
487
497
}
488
498
}
499
+
489
500
/**
490
501
* Get size of an element
491
502
*
@@ -522,11 +533,13 @@ zend_ulong meminfo_get_element_size(zval *zv)
522
533
char * meminfo_escape_for_json (const char * s )
523
534
{
524
535
int new_str_len ;
525
- char * s1 ;
536
+ char * s1 , * s2 ;
537
+ s1 = php_str_to_str ((char * )s , strlen (s ), "\\" , 1 , "\\\\" , 2 , & new_str_len );
538
+ s2 = php_str_to_str (s1 , strlen (s1 ), "\"" , 1 , "\\\"" , 2 , & new_str_len );
526
539
527
- s1 = php_str_to_str ( s , strlen ( s ), "\\" , 1 , "\\\\" , 2 , & new_str_len );
540
+ efree ( s1 );
528
541
529
- return php_str_to_str ( s1 , strlen ( s1 ), "\"" , 1 , "\\\"" , 2 , & new_str_len ) ;
542
+ return s2 ;
530
543
}
531
544
532
545
/**
0 commit comments