PATCH: [perl #116899]: jump on uninitialised value
authorKarl Williamson <public@khwilliamson.com>
Fri, 22 Feb 2013 20:04:05 +0000 (13:04 -0700)
committerKarl Williamson <public@khwilliamson.com>
Fri, 22 Feb 2013 20:29:16 +0000 (13:29 -0700)
commitc96939e471cb3942b61ec7b103b0449a9fde922d
tree1976c6c2d1e6c0b8d89f40e129b4be24a4031611
parentff4fdc72453c67f33d479da9d24a5242bf4ad5ba
PATCH: [perl #116899]: jump on uninitialised value

The culprit had nothing to do really with the accuesed commit.
The function S_cl_or() tries to take the union of the code points
matched by its two inputs.  Both of those nodes must be ANYOF-like
(for bracketed character classes and synthetic start classes).  These
come in two flavors, one having extra fields in the struct after the
other one's.  That is used for locale ANYOFs and the synthetic start
class.  The first paramter to cl_or() is always one of these extended
ANYOFS, but the second parameter may be the shorter form

The function was failing to check if the second one was the longer form
before reading data from beyond the short-form's struct.  This could
cause a segfault, but that wasn't the symptom here.  Instead it copied
that data to the other paramter's struct.  valgrind had set that data to
indicate it was uninitialized, so when later it was accessed, we got
this error.

During much of the 5.17 series until the failing commit, more ANYOF
nodes were the larger size.  I presume that is why this commit showed up
the problem.
regcomp.c