Stop warning hint-checking from doing bad reads
authorFather Chrysostomos <sprout@cpan.org>
Wed, 7 Mar 2012 22:12:08 +0000 (14:12 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Wed, 7 Mar 2012 22:12:51 +0000 (14:12 -0800)
commit5af88345d9b73adc26765854070a07f429ae112d
tree58f85af858fe3c6d1507055e26d175f43b0aed90
parenteef6290d07de3f52b42c2570878665af9511bcf8
Stop warning hint-checking from doing bad reads

Setting ${^WARNING_BITS} should not allow perl to read past the end of
a mallocked buffer.  Previously the internal warning buffer would be
copied straight from ${^WARNING_BITS}, so a short value assigned to
that variable would cause the internal warning-checking code to read
past the end of the buffer (probably not in actual practice, due to
malloc’s rounding up, but theoretically).  Now, the buffer that is
allocated for storing the warning bits is padded with nulls to make it
long enough to prevent bad reads.

The stored length is still the same as what was assigned to
${^WARNING_BITS}, so that the value that comes out of it is the same
length (UTF8-ness aside)--not that it makes much difference in prac-
tice though, since only warnings.pm should care about this.

This came up as part of perl #111500.
util.c