mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
Reject input that contains null characters
Null characters in the middle of strings interact badly with the RGBDS codebase, which assumes null-terminated strings. There is no reason to support null characters in input source code, so the simplest way to deal with null characters is to reject them early.
This commit is contained in:
@@ -269,6 +269,7 @@ YY_BUFFER_STATE yy_create_buffer(FILE *f)
|
||||
/* Convert all line endings to LF and spaces */
|
||||
|
||||
char *mem = pBuffer->pBuffer;
|
||||
int32_t lineCount = 0;
|
||||
|
||||
while (*mem) {
|
||||
if ((mem[0] == '\\') && (mem[1] == '\"' || mem[1] == '\\')) {
|
||||
@@ -279,15 +280,22 @@ YY_BUFFER_STATE yy_create_buffer(FILE *f)
|
||||
|| ((mem[0] == '\r') && (mem[1] == '\n'))) {
|
||||
*mem++ = ' ';
|
||||
*mem++ = '\n';
|
||||
lineCount++;
|
||||
/* LF and CR */
|
||||
} else if ((mem[0] == '\n') || (mem[0] == '\r')) {
|
||||
*mem++ = '\n';
|
||||
lineCount++;
|
||||
} else {
|
||||
mem++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mem != pBuffer->pBuffer + size) {
|
||||
nLineNo = lineCount + 1;
|
||||
fatalerror("Found null character");
|
||||
}
|
||||
|
||||
/* Remove comments */
|
||||
|
||||
mem = pBuffer->pBuffer;
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
ERROR: null-in-macro.asm(1):
|
||||
Unterminated MACRO definition.
|
||||
ERROR: null-in-macro.asm(2):
|
||||
Found null character
|
||||
|
||||
Reference in New Issue
Block a user