@@ -1505,17 +1505,21 @@ redis_read_stream_messages(RedisSock *redis_sock, int count, zval *z_ret
1505
1505
* the multi-bulk header for field and values */
1506
1506
if ((read_mbulk_header (redis_sock , & mhdr ) < 0 || mhdr != 2 ) ||
1507
1507
((id = redis_sock_read (redis_sock , & idlen )) == NULL ) ||
1508
- (read_mbulk_header (redis_sock , & fields ) < 0 || fields % 2 != 0 ))
1508
+ (read_mbulk_header (redis_sock , & fields ) < 0 ||
1509
+ (fields > 0 && fields % 2 != 0 )))
1509
1510
{
1510
1511
if (id ) efree (id );
1511
1512
return -1 ;
1512
1513
}
1513
1514
1514
- array_init (& z_message );
1515
-
1516
- redis_mbulk_reply_loop (redis_sock , & z_message , fields , UNSERIALIZE_VALS );
1517
- array_zip_values_and_scores (redis_sock , & z_message , SCORE_DECODE_NONE );
1518
- add_assoc_zval_ex (z_ret , id , idlen , & z_message );
1515
+ if (fields < 0 ) {
1516
+ add_assoc_null_ex (z_ret , id , idlen );
1517
+ } else {
1518
+ array_init (& z_message );
1519
+ redis_mbulk_reply_loop (redis_sock , & z_message , fields , UNSERIALIZE_VALS );
1520
+ array_zip_values_and_scores (redis_sock , & z_message , SCORE_DECODE_NONE );
1521
+ add_assoc_zval_ex (z_ret , id , idlen , & z_message );
1522
+ }
1519
1523
efree (id );
1520
1524
}
1521
1525
0 commit comments