summaryrefslogtreecommitdiff
path: root/ext/sockets
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sockets')
-rw-r--r--ext/sockets/conversions.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/ext/sockets/conversions.c b/ext/sockets/conversions.c
index 963db66818..f6a86315b1 100644
--- a/ext/sockets/conversions.c
+++ b/ext/sockets/conversions.c
@@ -217,17 +217,14 @@ static unsigned from_array_iterate(const zval *arr,
void **args,
ser_context *ctx)
{
- HashPosition pos;
unsigned i;
zval *elem;
char buf[sizeof("element #4294967295")];
char *bufp = buf;
/* Note i starts at 1, not 0! */
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(arr), &pos), i = 1;
- !ctx->err.has_error
- && (elem = zend_hash_get_current_data_ex(Z_ARRVAL_P(arr), &pos)) != NULL;
- zend_hash_move_forward_ex(Z_ARRVAL_P(arr), &pos), i++) {
+ i = 1;
+ ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(arr), elem) {
if (snprintf(buf, sizeof(buf), "element #%u", i) >= sizeof(buf)) {
memcpy(buf, "element", sizeof("element"));
}
@@ -236,7 +233,11 @@ static unsigned from_array_iterate(const zval *arr,
func(elem, i, args, ctx);
zend_llist_remove_tail(&ctx->keys);
- }
+ if (ctx->err.has_error) {
+ break;
+ }
+ i++;
+ } ZEND_HASH_FOREACH_END();
return i -1;
}