fix bucket key segfault when converted into pair

This commit is contained in:
CismonX 2018-08-16 13:03:56 +08:00
parent 7d60aff7e4
commit 5e3518a5ec
2 changed files with 9 additions and 6 deletions

View File

@ -56,16 +56,17 @@
#define BUCKET_2_PAIR(pair, bucket) \
{ \
zval _key; \
if (bucket->key) \
if ((bucket)->key) \
{ \
ZVAL_STR(&_key, bucket->key); \
GC_ADDREF((bucket)->key); \
ZVAL_STR(&_key, (bucket)->key); \
} \
else \
{ \
ZVAL_LONG(&_key, bucket->h); \
ZVAL_LONG(&_key, (bucket)->h); \
} \
PAIR_UPDATE_FIRST(pair, &_key); \
PAIR_UPDATE_SECOND(pair, &bucket->val); \
PAIR_UPDATE_SECOND(pair, &(bucket)->val); \
}
#define CALLBACK_KEYVAL_INVOKE(params, bucket) \
@ -179,7 +180,9 @@ static int bucket_compare_userland(const void* op1, const void* op2)
ZVAL_COPY_VALUE(&params[0], &b1->val);
ZVAL_COPY_VALUE(&params[1], &b2->val);
zend_call_function(FCI_G, FCC_G);
return ZEND_NORMALIZE_BOOL(zval_get_long(&retval));
int result = ZEND_NORMALIZE_BOOL(zval_get_long(&retval));
zval_ptr_dtor(&retval);
return result;
}
int count_collection(zval* obj, zend_long* count)

View File

@ -12,7 +12,7 @@ $by_b = function($p1, $p2) {
return $p1->second['b'] - $p2->second['b'];
};
$by_c = function($p1, $p2) {
return $p1->second['c'] - $p2->second['c'];
return strval($p1->second['c'] - $p2->second['c']);
};
if ($collection->minWith($by_b) != $array['a'] || $collection->minWith($by_c) != $array['d'])
echo 'Collection::minWith() failed.', PHP_EOL;