@@ -477,7 +477,7 @@ int msgpack_unserialize_ext(msgpack_unserialize_data *unpack, const char* base,
477477int msgpack_unserialize_array (msgpack_unserialize_data * unpack , unsigned int count , zval * * obj ) /* {{{ */ {
478478 MSGPACK_UNSERIALIZE_ALLOC_VALUE (unpack );
479479
480- array_init_size (* obj , count );
480+ array_init_size (* obj , MIN ( count , 1 << 16 ) );
481481
482482 if (count ) {
483483 unpack -> stack [unpack -> deps ++ ] = count ;
@@ -488,7 +488,13 @@ int msgpack_unserialize_array(msgpack_unserialize_data *unpack, unsigned int cou
488488/* }}} */
489489
490490int msgpack_unserialize_array_item (msgpack_unserialize_data * unpack , zval * * container , zval * obj ) /* {{{ */ {
491- zval * nval = zend_hash_next_index_insert (Z_ARRVAL_P (* container ), obj );
491+ zval * nval ;
492+
493+ if (!* container || Z_TYPE_P (* container ) != IS_ARRAY ) {
494+ return -1 ;
495+ }
496+
497+ nval = zend_hash_next_index_insert (Z_ARRVAL_P (* container ), obj );
492498
493499 if (MSGPACK_IS_STACK_VALUE (obj )) {
494500 MSGPACK_UNSERIALIZE_FINISH_ITEM (unpack , obj , NULL );
@@ -696,7 +702,7 @@ int msgpack_unserialize_map_item(msgpack_unserialize_data *unpack, zval **contai
696702 }
697703 } else {
698704 if (Z_TYPE_P (container_val ) != IS_ARRAY ) {
699- array_init_size (container_val , unpack -> count );
705+ array_init_size (container_val , MIN ( unpack -> count , 1 << 16 ) );
700706 }
701707 switch (Z_TYPE_P (key )) {
702708 case IS_LONG :
0 commit comments