Skip to content

Commit

Permalink
append_yylval_tzString should always evaluate its argument
Browse files Browse the repository at this point in the history
Fixes gbdev#762
  • Loading branch information
Rangi42 committed Feb 25, 2021
1 parent 8808b5c commit 9d451a0
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/asm/lexer.c
Original file line number Diff line number Diff line change
Expand Up @@ -1462,15 +1462,16 @@ static char const *readInterpolation(void)
}

#define append_yylval_tzString(c) do { \
char v = (c); /* Evaluate c exactly once in case it has side effects. */ \
if (i < sizeof(yylval.tzString)) \
yylval.tzString[i++] = (c); \
yylval.tzString[i++] = v; \
} while (0)

static size_t appendEscapedSubstring(char const *str, size_t i)
{
/* Copy one extra to flag overflow */
while (*str) {
int c = *str++;
char c = *str++;

/* Escape characters that need escaping */
switch (c) {
Expand Down
13 changes: 13 additions & 0 deletions test/asm/long-string-constant.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@

println """This paragraph has exactly 257--that's two hundred and
fifty-seven--characters altogether. That's just enough for its last
two characters to be truncated by rgbasm's lexer, since it can't
handle more than 255-character strings. The final two won't print: !?"""

mac: MACRO
println "\1" ; x1
println "\1\1\1\1\1\1" ; x6
ENDM

mac Hello! ; 6x6 = 36
mac This sentence spans forty-three characters. ; 43x6 = 258
4 changes: 4 additions & 0 deletions test/asm/long-string-constant.err
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
warning: long-string-constant.asm(5): [-Wlong-string]
String constant too long
warning: long-string-constant.asm(13) -> long-string-constant.asm::mac(9): [-Wlong-string]
String constant too long
8 changes: 8 additions & 0 deletions test/asm/long-string-constant.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
This paragraph has exactly 257--that's two hundred and
fifty-seven--characters altogether. That's just enough for its last
two characters to be truncated by rgbasm's lexer, since it can't
handle more than 255-character strings. The final two won't print:
Hello!
Hello!Hello!Hello!Hello!Hello!Hello!
This sentence spans forty-three characters.
This sentence spans forty-three characters.This sentence spans forty-three characters.This sentence spans forty-three characters.This sentence spans forty-three characters.This sentence spans forty-three characters.This sentence spans forty-three characte

0 comments on commit 9d451a0

Please sign in to comment.