Skip to content

Commit 1ac611f

Browse files
committed
Merge branch 'PHP-5.3' of ssh://git.php.net/php-src into PHP-5.3
2 parents f826ea0 + e6cf7d7 commit 1ac611f

31 files changed

+95
-73
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ PHP NEWS
1212
. Fixed CVE-2012-2143. (Solar Designer)
1313
. Fixed potential overflow in _php_stream_scandir. (Jason Powell,
1414
Stas)
15+
. Fixed bug #62432 (ReflectionMethod random corrupt memory on high
16+
concurrent). (Johannes)
17+
. Fixed bug #62443 (Crypt SHA256/512 Segfaults With Malformed
18+
Salt). (Anthony Ferrara)
1519

1620
- Fileinfo:
1721
. Fixed magic file regex support. (Felipe)

ext/date/php_date.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2035,7 +2035,7 @@ static inline zend_object_value date_object_new_date_ex(zend_class_entry *class_
20352035
}
20362036

20372037
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
2038-
zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
2038+
zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_property_ctor, (void *) &tmp, sizeof(zval *));
20392039

20402040
retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_date, NULL TSRMLS_CC);
20412041
retval.handlers = &date_object_handlers_date;
@@ -2159,7 +2159,7 @@ static inline zend_object_value date_object_new_timezone_ex(zend_class_entry *cl
21592159
}
21602160

21612161
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
2162-
zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
2162+
zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_property_ctor, (void *) &tmp, sizeof(zval *));
21632163

21642164
retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_timezone, NULL TSRMLS_CC);
21652165
retval.handlers = &date_object_handlers_timezone;
@@ -2215,7 +2215,7 @@ static inline zend_object_value date_object_new_interval_ex(zend_class_entry *cl
22152215
}
22162216

22172217
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
2218-
zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
2218+
zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_property_ctor, (void *) &tmp, sizeof(zval *));
22192219

22202220
retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_interval, NULL TSRMLS_CC);
22212221
retval.handlers = &date_object_handlers_interval;
@@ -2291,7 +2291,7 @@ static inline zend_object_value date_object_new_period_ex(zend_class_entry *clas
22912291
}
22922292

22932293
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
2294-
zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
2294+
zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_property_ctor, (void *) &tmp, sizeof(zval *));
22952295

22962296
retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_period, NULL TSRMLS_CC);
22972297
retval.handlers = &date_object_handlers_period;

ext/fileinfo/fileinfo.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ PHP_FILEINFO_API zend_object_value finfo_objects_new(zend_class_entry *class_typ
104104
memset(intern, 0, sizeof(struct finfo_object));
105105

106106
zend_object_std_init(&intern->zo, class_type TSRMLS_CC);
107-
zend_hash_copy(intern->zo.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref,(void *) &tmp, sizeof(zval *));
107+
zend_hash_copy(intern->zo.properties, &class_type->default_properties, (copy_ctor_func_t) zval_property_ctor,(void *) &tmp, sizeof(zval *));
108108

109109
intern->ptr = NULL;
110110

ext/json/json.c

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ static PHP_MINFO_FUNCTION(json);
3434
static PHP_FUNCTION(json_encode);
3535
static PHP_FUNCTION(json_decode);
3636
static PHP_FUNCTION(json_last_error);
37+
static PHP_FUNCTION(json_last_error_msg);
3738

3839
static const char digits[] = "0123456789abcdef";
3940

@@ -51,8 +52,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_json_decode, 0, 0, 1)
5152
ZEND_ARG_INFO(0, depth)
5253
ZEND_END_ARG_INFO()
5354

54-
ZEND_BEGIN_ARG_INFO_EX(arginfo_json_last_error, 0, 0, 0)
55-
ZEND_ARG_INFO(0, as_string)
55+
ZEND_BEGIN_ARG_INFO(arginfo_json_last_error, 0)
56+
ZEND_END_ARG_INFO()
57+
58+
ZEND_BEGIN_ARG_INFO(arginfo_json_last_error_msg, 0)
5659
ZEND_END_ARG_INFO()
5760
/* }}} */
5861

@@ -61,6 +64,7 @@ static const function_entry json_functions[] = {
6164
PHP_FE(json_encode, arginfo_json_encode)
6265
PHP_FE(json_decode, arginfo_json_decode)
6366
PHP_FE(json_last_error, arginfo_json_last_error)
67+
PHP_FE(json_last_error_msg, arginfo_json_last_error_msg)
6468
PHP_FE_END
6569
};
6670
/* }}} */
@@ -607,21 +611,25 @@ static PHP_FUNCTION(json_decode)
607611
/* }}} */
608612

609613
/* {{{ proto int json_last_error()
610-
Returns the error code of the last json_decode(). */
614+
Returns the error code of the last json_encode() or json_decode() call. */
611615
static PHP_FUNCTION(json_last_error)
612616
{
613-
zend_bool as_string = 0;
614-
615-
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &as_string) == FAILURE) {
617+
if (zend_parse_parameters_none() == FAILURE) {
616618
return;
617619
}
618620

619-
/* return error code (JSON_ERROR_* constants) */
620-
if (!as_string) {
621-
RETURN_LONG(JSON_G(error_code));
621+
RETURN_LONG(JSON_G(error_code));
622+
}
623+
/* }}} */
624+
625+
/* {{{ proto string json_last_error_msg()
626+
Returns the error string of the last json_encode() or json_decode() call. */
627+
static PHP_FUNCTION(json_last_error_msg)
628+
{
629+
if (zend_parse_parameters_none() == FAILURE) {
630+
return;
622631
}
623632

624-
/* return error message (for debugging purposes) */
625633
switch(JSON_G(error_code)) {
626634
case PHP_JSON_ERROR_NONE:
627635
RETURN_STRING("No error", 1);
@@ -644,6 +652,7 @@ static PHP_FUNCTION(json_last_error)
644652
default:
645653
RETURN_STRING("Unknown error", 1);
646654
}
655+
647656
}
648657
/* }}} */
649658

ext/json/tests/003.phpt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,12 @@ var_dump($a);
1313
echo "\n";
1414

1515
var_dump(json_encode($a));
16-
var_dump(json_last_error());
17-
var_dump(json_last_error(true));
16+
var_dump(json_last_error(), json_last_error_msg());
1817

1918
echo "\n";
2019

2120
var_dump(json_encode($a, JSON_PARTIAL_OUTPUT_ON_ERROR));
22-
var_dump(json_last_error());
23-
var_dump(json_last_error(true));
21+
var_dump(json_last_error(), json_last_error_msg());
2422

2523
echo "Done\n";
2624
?>

ext/json/tests/004.phpt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,12 @@ var_dump($a);
1313
echo "\n";
1414

1515
var_dump(json_encode($a));
16-
var_dump(json_last_error());
17-
var_dump(json_last_error(true));
16+
var_dump(json_last_error(), json_last_error_msg());
1817

1918
echo "\n";
2019

2120
var_dump(json_encode($a, JSON_PARTIAL_OUTPUT_ON_ERROR));
22-
var_dump(json_last_error());
23-
var_dump(json_last_error(true));
21+
var_dump(json_last_error(), json_last_error_msg());
2422

2523
echo "Done\n";
2624
?>

ext/json/tests/007.phpt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ json_last_error() tests
55
--FILE--
66
<?php
77
var_dump(json_decode("[1]"));
8-
var_dump(json_last_error());
8+
var_dump(json_last_error(), json_last_error_msg());
99
var_dump(json_decode("[[1]]", false, 2));
10-
var_dump(json_last_error());
10+
var_dump(json_last_error(), json_last_error_msg());
1111
var_dump(json_decode("[1}"));
12-
var_dump(json_last_error());
12+
var_dump(json_last_error(), json_last_error_msg());
1313
var_dump(json_decode('["' . chr(0) . 'abcd"]'));
14-
var_dump(json_last_error());
14+
var_dump(json_last_error(), json_last_error_msg());
1515
var_dump(json_decode("[1"));
16-
var_dump(json_last_error());
16+
var_dump(json_last_error(), json_last_error_msg());
1717

1818

1919
echo "Done\n";
@@ -24,13 +24,17 @@ array(1) {
2424
int(1)
2525
}
2626
int(0)
27+
string(8) "No error"
2728
NULL
2829
int(1)
30+
string(28) "Maximum stack depth exceeded"
2931
NULL
3032
int(2)
33+
string(42) "State mismatch (invalid or malformed JSON)"
3134
NULL
3235
int(3)
36+
string(53) "Control character error, possibly incorrectly encoded"
3337
NULL
3438
int(4)
39+
string(12) "Syntax error"
3540
Done
36-

ext/json/tests/bug54058.phpt

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,25 @@ Bug #54058 (json_last_error() invalid UTF-8 produces wrong error)
88
$bad_utf8 = quoted_printable_decode('=B0');
99

1010
json_encode($bad_utf8);
11-
var_dump(json_last_error());
12-
var_dump(json_last_error(true));
11+
var_dump(json_last_error(), json_last_error_msg());
1312

1413
$a = new stdclass;
1514
$a->foo = quoted_printable_decode('=B0');
1615
json_encode($a);
17-
var_dump(json_last_error());
18-
var_dump(json_last_error(true));
16+
var_dump(json_last_error(), json_last_error_msg());
1917

2018
$b = new stdclass;
2119
$b->foo = $bad_utf8;
2220
$b->bar = 1;
2321
json_encode($b);
24-
var_dump(json_last_error());
25-
var_dump(json_last_error(true));
22+
var_dump(json_last_error(), json_last_error_msg());
2623

2724
$c = array(
2825
'foo' => $bad_utf8,
2926
'bar' => 1
3027
);
3128
json_encode($c);
32-
var_dump(json_last_error());
33-
var_dump(json_last_error(true));
29+
var_dump(json_last_error(), json_last_error_msg());
3430

3531
?>
3632
--EXPECTF--

ext/json/tests/bug61537.phpt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,20 @@ Bug #61537 (json_encode() incorrectly truncates/discards information)
77
$invalid_utf8 = "\x9f";
88

99
var_dump(json_encode($invalid_utf8));
10-
var_dump(json_last_error(), json_last_error(true));
10+
var_dump(json_last_error(), json_last_error_msg());
1111

1212
var_dump(json_encode($invalid_utf8, JSON_PARTIAL_OUTPUT_ON_ERROR));
13-
var_dump(json_last_error(), json_last_error(true));
13+
var_dump(json_last_error(), json_last_error_msg());
1414

1515
echo "\n";
1616

1717
$invalid_utf8 = "an invalid sequen\xce in the middle of a string";
1818

1919
var_dump(json_encode($invalid_utf8));
20-
var_dump(json_last_error(), json_last_error(true));
20+
var_dump(json_last_error(), json_last_error_msg());
2121

2222
var_dump(json_encode($invalid_utf8, JSON_PARTIAL_OUTPUT_ON_ERROR));
23-
var_dump(json_last_error(), json_last_error(true));
23+
var_dump(json_last_error(), json_last_error_msg());
2424

2525
?>
2626
--EXPECTF--

ext/json/tests/inf_nan_error.phpt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
--TEST--
22
An error is thrown when INF or NaN are encoded
3+
--SKIPIF--
4+
<?php if (!extension_loaded("json")) print "skip"; ?>
35
--FILE--
46
<?php
57

@@ -8,10 +10,10 @@ $inf = INF;
810
var_dump($inf);
911

1012
var_dump(json_encode($inf));
11-
var_dump(json_last_error(), json_last_error(true));
13+
var_dump(json_last_error(), json_last_error_msg());
1214

1315
var_dump(json_encode($inf, JSON_PARTIAL_OUTPUT_ON_ERROR));
14-
var_dump(json_last_error(), json_last_error(true));
16+
var_dump(json_last_error(), json_last_error_msg());
1517

1618
echo "\n";
1719

@@ -20,10 +22,10 @@ $nan = NAN;
2022
var_dump($nan);
2123

2224
var_dump(json_encode($nan));
23-
var_dump(json_last_error(), json_last_error(true));
25+
var_dump(json_last_error(), json_last_error_msg());
2426

2527
var_dump(json_encode($nan, JSON_PARTIAL_OUTPUT_ON_ERROR));
26-
var_dump(json_last_error(), json_last_error(true));
28+
var_dump(json_last_error(), json_last_error_msg());
2729
?>
2830
--EXPECTF--
2931
float(INF)

0 commit comments

Comments
 (0)