Skip to content

Commit 56d96c5

Browse files
committed
Check hash protection flag to avoid memory corruption
1 parent 9e619ca commit 56d96c5

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
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
}

0 commit comments

Comments
 (0)