Skip to content

Commit 95c8dc3

Browse files
committed
Better fix
1 parent 5f7165e commit 95c8dc3

File tree

1 file changed

+6
-9
lines changed

1 file changed

+6
-9
lines changed

msgpack_pack.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ static inline int msgpack_check_ht_is_map(zval *array) /* {{{ */ {
4242
}
4343
/* }}} */
4444

45-
static inline int msgpack_var_add(HashTable *var_hash, zval *var, zval **var_old) /* {{{ */ {
45+
static inline int msgpack_var_add(HashTable *var_hash, zval *var, zend_long *var_old) /* {{{ */ {
4646
uint32_t len;
4747
char id[32], *p;
4848
zval *var_noref, *var_exists, zv;
@@ -68,14 +68,11 @@ static inline int msgpack_var_add(HashTable *var_hash, zval *var, zval **var_old
6868
}
6969

7070
if (var_old && (var_exists = zend_hash_str_find(var_hash, p, len)) != NULL) {
71+
*var_old = Z_LVAL_P(var_exists);
7172
if (!Z_ISREF_P(var)) {
72-
size_t offset = (char *)var_exists - (char*)var_hash->arData;
7373
ZVAL_LONG(&zv, -1);
7474
zend_hash_next_index_insert(var_hash, &zv);
75-
/* table maybe resized */
76-
var_exists = (zval *)((char *)var_hash->arData + offset);
7775
}
78-
*var_old = var_exists;
7976
return 0;
8077
}
8178

@@ -408,7 +405,7 @@ static inline void msgpack_serialize_object(smart_str *buf, zval *val, HashTable
408405

409406
void msgpack_serialize_zval(smart_str *buf, zval *val, HashTable *var_hash) /* {{{ */ {
410407
zval *val_noref;
411-
zval *var_already;
408+
zend_long var_already;
412409

413410
if (Z_TYPE_P(val) == IS_INDIRECT) {
414411
val = Z_INDIRECT_P(val);
@@ -423,7 +420,7 @@ void msgpack_serialize_zval(smart_str *buf, zval *val, HashTable *var_hash) /* {
423420
msgpack_pack_long(buf, MSGPACK_SERIALIZE_TYPE_RECURSIVE);
424421

425422
msgpack_pack_long(buf, 0);
426-
msgpack_pack_long(buf, Z_LVAL_P(var_already));
423+
msgpack_pack_long(buf, var_already);
427424

428425
return;
429426
} else if (Z_TYPE_P(Z_REFVAL_P(val)) == IS_OBJECT) {
@@ -433,7 +430,7 @@ void msgpack_serialize_zval(smart_str *buf, zval *val, HashTable *var_hash) /* {
433430
msgpack_pack_long(buf, MSGPACK_SERIALIZE_TYPE_OBJECT_REFERENCE);
434431

435432
msgpack_pack_long(buf, 0);
436-
msgpack_pack_long(buf, Z_LVAL_P(var_already));
433+
msgpack_pack_long(buf, var_already);
437434

438435
return;
439436
}
@@ -444,7 +441,7 @@ void msgpack_serialize_zval(smart_str *buf, zval *val, HashTable *var_hash) /* {
444441
msgpack_pack_long(buf, MSGPACK_SERIALIZE_TYPE_OBJECT);
445442

446443
msgpack_pack_long(buf, 0);
447-
msgpack_pack_long(buf, Z_LVAL_P(var_already));
444+
msgpack_pack_long(buf, var_already);
448445

449446
return;
450447
}

0 commit comments

Comments
 (0)