Skip to content

Commit 53f804a

Browse files
committed
Merge pull request #82 from rlerdorf/php7
Check hash protection flag to avoid memory corruption
2 parents 9e619ca + cb879c6 commit 53f804a

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

msgpack_pack.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -283,11 +283,11 @@ static inline void msgpack_serialize_array(smart_str *buf, zval *val, HashTable
283283
if ((Z_TYPE_P(value_noref) == IS_ARRAY && ZEND_HASH_GET_APPLY_COUNT(Z_ARRVAL_P(value_noref)) > 1)) {
284284
msgpack_pack_nil(buf);
285285
} else {
286-
if (Z_TYPE_P(value_noref) == IS_ARRAY) {
286+
if (Z_TYPE_P(value_noref) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION(Z_ARRVAL_P(value_noref))) {
287287
ZEND_HASH_INC_APPLY_COUNT(Z_ARRVAL_P(value_noref));
288288
}
289289
msgpack_serialize_zval(buf, value, var_hash);
290-
if (Z_TYPE_P(value_noref) == IS_ARRAY) {
290+
if (Z_TYPE_P(value_noref) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION(Z_ARRVAL_P(value_noref))) {
291291
ZEND_HASH_DEC_APPLY_COUNT(Z_ARRVAL_P(value_noref));
292292
}
293293
}
@@ -310,13 +310,13 @@ static inline void msgpack_serialize_array(smart_str *buf, zval *val, HashTable
310310
data_noref = data;
311311
}
312312

313-
if (Z_TYPE_P(data_noref) == IS_ARRAY) {
313+
if (Z_TYPE_P(data_noref) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION(Z_ARRVAL_P(data_noref))) {
314314
ZEND_HASH_INC_APPLY_COUNT(Z_ARRVAL_P(data_noref));
315315
}
316316

317317
msgpack_serialize_zval(buf, data, var_hash);
318318

319-
if (Z_TYPE_P(data_noref) == IS_ARRAY) {
319+
if (Z_TYPE_P(data_noref) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION(Z_ARRVAL_P(data_noref))) {
320320
ZEND_HASH_DEC_APPLY_COUNT(Z_ARRVAL_P(data_noref));
321321
}
322322
}

tests/029.phpt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ extension Version => %s
4848
header Version => %s
4949

5050
Directive => Local Value => Master Value
51-
msgpack.error_display => On => On
52-
msgpack.illegal_key_insert => Off => Off
53-
msgpack.php_only => On => On
54-
msgpack.use_str8_serialization => On => On
51+
msgpack.error_display => %s => %s
52+
msgpack.illegal_key_insert => %s => %s
53+
msgpack.php_only => %s => %s
54+
msgpack.use_str8_serialization => %s => %s

tests/137.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
--TEST--
22
unpack/pack str8
3+
--INI--
4+
msgpack.use_str8_serialization = 1
35
--SKIPIF--
46
<?php
57
if (version_compare(PHP_VERSION, '5.2.0') < 0) {

0 commit comments

Comments
 (0)