Skip to content

Commit baefefc

Browse files
committed
fix issue #81 and (part of) PR #135
1 parent fb746e0 commit baefefc

File tree

2 files changed

+63
-2
lines changed

2 files changed

+63
-2
lines changed

msgpack_pack.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ static inline void msgpack_serialize_array(smart_str *buf, zval *val, HashTable
228228
}
229229

230230
if (ht) {
231-
n = zend_hash_num_elements(ht);
231+
n = zend_array_count(ht);
232232
} else {
233233
n = 0;
234234
}
@@ -274,7 +274,7 @@ static inline void msgpack_serialize_array(smart_str *buf, zval *val, HashTable
274274
zend_ulong key_long;
275275
zval *value, *value_noref;
276276

277-
ZEND_HASH_FOREACH_KEY_VAL(ht, key_long, key_str, value) {
277+
ZEND_HASH_FOREACH_KEY_VAL_IND(ht, key_long, key_str, value) {
278278
if (key_str && incomplete_class && strcmp(ZSTR_VAL(key_str), MAGIC_MEMBER) == 0) {
279279
continue;
280280
}

tests/issue081.phpt

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
--TEST--
2+
Issue #81 (Ignore IS_UNDEF)
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded("msgpack)) {
6+
die("skip");
7+
}
8+
?>
9+
--FILE--
10+
<?php
11+
class MyClass
12+
{
13+
private $first_field;
14+
private $second_field;
15+
16+
public function __construct()
17+
{
18+
$this->first_field = 'first_field';
19+
$this->second_field = 'second_field';
20+
}
21+
22+
public function preSerialize()
23+
{
24+
unset($this->first_field);
25+
}
26+
}
27+
28+
$t = new MyClass();
29+
var_dump($t);
30+
var_dump(msgpack_unpack(msgpack_pack($t)));
31+
32+
$t = new MyClass();
33+
$t->preSerialize();
34+
var_dump($t);
35+
var_dump(msgpack_unpack(msgpack_pack($t)));
36+
?>
37+
OK
38+
--EXPECTF--
39+
object(MyClass)#%d (2) {
40+
["first_field":"MyClass":private]=>
41+
string(11) "first_field"
42+
["second_field":"MyClass":private]=>
43+
string(12) "second_field"
44+
}
45+
object(MyClass)#%d (2) {
46+
["first_field":"MyClass":private]=>
47+
string(11) "first_field"
48+
["second_field":"MyClass":private]=>
49+
string(12) "second_field"
50+
}
51+
object(MyClass)#%d (1) {
52+
["second_field":"MyClass":private]=>
53+
string(12) "second_field"
54+
}
55+
object(MyClass)#%d (2) {
56+
["first_field":"MyClass":private]=>
57+
NULL
58+
["second_field":"MyClass":private]=>
59+
string(12) "second_field"
60+
}
61+
OK

0 commit comments

Comments
 (0)