diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index f7c669a40dd..e131ce93f55 100755 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -949,6 +949,10 @@ SPL_METHOD(dual_it, key) if (intern->current.data) { if (intern->current.key_type == HASH_KEY_IS_STRING) { RETURN_STRINGL(intern->current.str_key, intern->current.str_key_len-1, 1); + } else if (intern->current.key_type == HASH_KEY_IS_BINARY) { + RETURN_BINARYL(intern->current.str_key, intern->current.str_key_len-1, 1); + } else if (intern->current.key_type == HASH_KEY_IS_UNICODE) { + RETURN_UNICODEL(intern->current.str_key, intern->current.str_key_len-1, 1); } else { RETURN_LONG(intern->current.int_key); } @@ -1911,6 +1915,14 @@ PHP_FUNCTION(iterator_to_array) add_assoc_zval_ex(return_value, str_key, str_key_len, *data); efree(str_key); break; + case HASH_KEY_IS_BINARY: + add_u_assoc_zval_ex(return_value, IS_BINARY, str_key, str_key_len, *data); + efree(str_key); + break; + case HASH_KEY_IS_UNICODE: + add_u_assoc_zval_ex(return_value, IS_UNICODE, str_key, str_key_len, *data); + efree(str_key); + break; case HASH_KEY_IS_LONG: add_index_zval(return_value, int_key, *data); break;