diff --git a/src/php/ext/grpc/call.c b/src/php/ext/grpc/call.c index 4b4336666cba088d40ccb916c667f9ab818bfe01..024ab70571b62395924bf75621fcfd43b8e394be 100644 --- a/src/php/ext/grpc/call.c +++ b/src/php/ext/grpc/call.c @@ -125,9 +125,15 @@ zval *grpc_parse_metadata_array(grpc_metadata_array *metadata_array) { memcpy(str_val, elem->value, elem->value_length); if (zend_hash_find(array_hash, str_key, key_len, (void **)data) == SUCCESS) { - zend_throw_exception(zend_exception_get_default(), - "Metadata hash somehow contains wrong types.", - 1 TSRMLS_CC); + if (Z_TYPE_P(*data) != IS_ARRAY) { + zend_throw_exception(zend_exception_get_default(), + "Metadata hash somehow contains wrong types.", + 1 TSRMLS_CC); + efree(str_key); + efree(str_val); + return NULL; + } + add_next_index_stringl(*data, str_val, elem->value_length, false); } else { MAKE_STD_ZVAL(inner_array); array_init(inner_array);