The sequence
#define m()
int m"
creates a token of no length (a string of 0 size). Protect
against a string of 0 size as well as the existing protect
against a null string.
cppBad.vert
ERROR: 0:2: 'preprocessor evaluation' : bad expression
ERROR: 0:2: '#if' : unexpected tokens following directive
-ERROR: 0:3: '' : missing #endif
-ERROR: 3 compilation errors. No code generated.
+ERROR: 0:5: 'string' : End of line in string
+ERROR: 0:5: 'macro expansion' : expected '(' following n
+ERROR: 0:5: '' : syntax error
+ERROR: 5 compilation errors. No code generated.
Shader version: 100
#define m#0#\r
#if m\r
+\r
+#define n()\r
+int n"
\ No newline at end of file
// For the version, it uses the latest git tag followed by the number of commits.
// For the date, it uses the current date (when then script is run).
-#define GLSLANG_REVISION "SPIRV99.1373"
+#define GLSLANG_REVISION "SPIRV99.1374"
#define GLSLANG_DATE "30-Jul-2016"
ReservedSet = nullptr;
}
+// Called by yylex to get the next token.
+// Returning 0 implies end of input.
int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
{
do {
parserToken = &token;
TPpToken ppToken;
tokenText = pp->tokenize(&ppToken);
- if (tokenText == nullptr)
+ if (tokenText == nullptr || tokenText[0] == 0)
return 0;
loc = ppToken.loc;