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:
dbrotz
2019-09-09 17:27:56 -07:00
parent 17b9838c8f
commit c5e8e4ff83
2 changed files with 10 additions and 2 deletions

View File

@@ -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;

View File

@@ -1,2 +1,2 @@
ERROR: null-in-macro.asm(1):
Unterminated MACRO definition.
ERROR: null-in-macro.asm(2):
Found null character