@@ -573,6 +573,7 @@ static zend_op* _get_recv_op(zend_op_array *op_array, uint32_t offset)
573
573
}
574
574
++ op ;
575
575
}
576
+ ZEND_ASSERT (0 && "Failed to find op" );
576
577
return NULL ;
577
578
}
578
579
/* }}} */
@@ -1356,6 +1357,19 @@ static int get_default_via_ast(zval *default_value_zval, const char *default_val
1356
1357
return SUCCESS ;
1357
1358
}
1358
1359
1360
+ static zend_string * try_parse_string (const char * str , size_t len , char quote ) {
1361
+ if (len == 0 ) {
1362
+ return ZSTR_EMPTY_ALLOC ();
1363
+ }
1364
+
1365
+ for (size_t i = 0 ; i < len ; i ++ ) {
1366
+ if (str [i ] == '\\' || str [i ] == quote ) {
1367
+ return NULL ;
1368
+ }
1369
+ }
1370
+ return zend_string_init (str , len , 0 );
1371
+ }
1372
+
1359
1373
/* {{{ _reflection_param_get_default_arg_info */
1360
1374
static int _reflection_param_get_default_arg_info (zend_internal_arg_info * arg_info , zval * default_value_zval )
1361
1375
{
@@ -1380,16 +1394,27 @@ static int _reflection_param_get_default_arg_info(zend_internal_arg_info *arg_in
1380
1394
&& !memcmp (default_value , "false" , sizeof ("false" )- 1 )) {
1381
1395
ZVAL_FALSE (default_value_zval );
1382
1396
return SUCCESS ;
1383
- } else if (default_value_len == sizeof ("\"\"" )- 1
1384
- && (!memcmp (default_value , "\"\"" , sizeof ("\"\"" )- 1 )
1385
- || !memcmp (default_value , "''" , sizeof ("''" )- 1 ))) {
1386
- ZVAL_EMPTY_STRING (default_value_zval );
1397
+ } else if (default_value_len >= 2
1398
+ && (default_value [0 ] == '\'' || default_value [0 ] == '"' )
1399
+ && default_value [default_value_len - 1 ] == default_value [0 ]) {
1400
+ zend_string * str = try_parse_string (
1401
+ default_value + 1 , default_value_len - 2 , default_value [0 ]);
1402
+ if (str ) {
1403
+ ZVAL_STR (default_value_zval , str );
1404
+ return SUCCESS ;
1405
+ }
1406
+ } else if (default_value_len == sizeof ("[]" )- 1
1407
+ && !memcmp (default_value , "[]" , sizeof ("[]" )- 1 )) {
1408
+ ZVAL_EMPTY_ARRAY (default_value_zval );
1387
1409
return SUCCESS ;
1388
1410
} else if (ZEND_HANDLE_NUMERIC_STR (default_value , default_value_len , lval )) {
1389
1411
ZVAL_LONG (default_value_zval , lval );
1390
1412
return SUCCESS ;
1391
1413
}
1392
1414
1415
+ #if 0
1416
+ fprintf (stderr , "Evaluating %s via AST\n" , default_value );
1417
+ #endif
1393
1418
return get_default_via_ast (default_value_zval , default_value );
1394
1419
}
1395
1420
0 commit comments