History log of /php-src/ext/zend_test/tests/hash_fill_packed_nr_elements.phpt (Results 1 – 1 of 1)
Revision Date Author Comments
# 2ef1930a 06-Apr-2023 Niels Dossche <7771979+nielsdos@users.noreply.github.com>

Fix number of elements after packed hash filling (#11022)

After a hash filling routine the number of elements are set to the fill
index. However, if the fill index is larger than the num

Fix number of elements after packed hash filling (#11022)

After a hash filling routine the number of elements are set to the fill
index. However, if the fill index is larger than the number of elements,
the number of elements are no longer correct. This is observable at
least via count() and var_dump(). E.g. the attached test case would
incorrectly show int(17) instead of int(11).

Solve this by only increasing the number of elements by the actual
number that got added. Instead of adding a variable that increments per
iteration, I wanted to save some cycles in the iteration and simply
compute the number of added elements at the end.

I discovered this behaviour while fixing GH-11016, where this filling
routine is easily exposed to userland via a specialised VM path [1].
Since this seems to be more a general problem with the macros, and may
be triggered outside of the VM handlers, I fixed it in the macros
instead of modifying the VM to fixup the number of elements.

[1] https://github.com/php/php-src/blob/b2c5acbb010f4bbc7ea9b53ba9bc81d672dd0f34/Zend/zend_vm_def.h#L6132-L6141

show more ...