Protect location setting methods from writing to non-existing strings.
authorLei Zhang <antiagainst@google.com>
Fri, 10 Jul 2015 15:18:47 +0000 (11:18 -0400)
committerLei Zhang <antiagainst@google.com>
Wed, 15 Jul 2015 17:03:27 +0000 (13:03 -0400)
commit6c9a38161be3be4bfef5513d3e5eb4c66f3ef24a
tree6060c99adc53a1806025e189a66549da9c511080
parent9e55f633bcc8ce60500a5591b1b5b1a696ab6ee0
Protect location setting methods from writing to non-existing strings.

TInputScanner advances its internal indices to the next character at
the end of get(), which means, after reading in the last character
in the user-provided shader string, internal index (currentSource)
will point to the next shader string (currentSource == numSources),
which doesn't exist. Then if a location setting method is called,
we will write to some out-of-bound memory.

A test case for this is "#line 10000\n". The eval() method in CPPline()
will evaluate 10000, but at the same time it reads in the next
token, '\n', and the currentSource will be numSources in TInputScanner.
Then a parseContext.setCurrentLine() is called, we are writing to
out-of-bound memory. Another test case will be "#line 10000 0\n".
glslang/MachineIndependent/Scan.h