From: Daiki Ueno Date: Sat, 11 May 2013 23:47:37 +0000 (+0900) Subject: Fix end-of-string handling in JavaScript scanner. X-Git-Tag: v0.18.3~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=75d73d9a93f9e689a167e5c383ccaefce38e8294;p=thirdparty%2Fgettext.git Fix end-of-string handling in JavaScript scanner. --- diff --git a/gettext-tools/src/ChangeLog b/gettext-tools/src/ChangeLog index 7ff1136f1..d329dfc0c 100644 --- a/gettext-tools/src/ChangeLog +++ b/gettext-tools/src/ChangeLog @@ -1,3 +1,11 @@ +2013-05-12 Daiki Ueno + + Fix end-of-string handling in JavaScript scanner. + * x-javascript.c (phase7_getuc): Remove unused BACKSLASH_COUNTER + argument; all callers changed. + Reported by Andreas Stricker in + . + 2013-05-03 Daiki Ueno * user-email.sh.in (lowercase_sed): Don't use non-portable diff --git a/gettext-tools/src/x-javascript.c b/gettext-tools/src/x-javascript.c index 095a38404..a9296dfd9 100644 --- a/gettext-tools/src/x-javascript.c +++ b/gettext-tools/src/x-javascript.c @@ -963,7 +963,7 @@ free_token (token_ty *tp) \uNNNN */ static int -phase7_getuc (int quote_char, unsigned int *backslash_counter) +phase7_getuc (int quote_char) { int c; @@ -975,10 +975,8 @@ phase7_getuc (int quote_char, unsigned int *backslash_counter) if (c == UEOF) return P7_EOF; - if (c == quote_char && (*backslash_counter & 1) == 0) - { - return P7_STRING_END; - } + if (c == quote_char) + return P7_STRING_END; if (c == '\n') { @@ -991,46 +989,32 @@ phase7_getuc (int quote_char, unsigned int *backslash_counter) } if (c != '\\') - { - *backslash_counter = 0; - return UNICODE (c); - } + return UNICODE (c); /* Dispatch according to the character following the backslash. */ c = phase2_getc (); if (c == UEOF) - { - ++*backslash_counter; - return UNICODE ('\\'); - } + return UNICODE ('\\'); switch (c) { case '\n': continue; case '\\': - ++*backslash_counter; return UNICODE (c); case '\'': case '"': - *backslash_counter = 0; return UNICODE (c); case 'b': - *backslash_counter = 0; return UNICODE ('\b'); case 'f': - *backslash_counter = 0; return UNICODE ('\f'); case 'n': - *backslash_counter = 0; return UNICODE ('\n'); case 'r': - *backslash_counter = 0; return UNICODE ('\r'); case 't': - *backslash_counter = 0; return UNICODE ('\t'); case 'v': - *backslash_counter = 0; return UNICODE ('\v'); case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': @@ -1055,7 +1039,6 @@ phase7_getuc (int quote_char, unsigned int *backslash_counter) else phase2_ungetc (c); } - *backslash_counter = 0; return UNICODE (n); } case 'x': @@ -1089,7 +1072,6 @@ phase7_getuc (int quote_char, unsigned int *backslash_counter) if (n2 >= 0) { int n = (n1 << 4) + n2; - *backslash_counter = 0; return UNICODE (n); } @@ -1097,7 +1079,6 @@ phase7_getuc (int quote_char, unsigned int *backslash_counter) } phase2_ungetc (c1); phase2_ungetc (c); - ++*backslash_counter; return UNICODE ('\\'); } case 'u': @@ -1122,13 +1103,11 @@ phase7_getuc (int quote_char, unsigned int *backslash_counter) while (--i >= 0) phase2_ungetc (buf[i]); phase2_ungetc (c); - ++*backslash_counter; return UNICODE ('\\'); } buf[i] = c1; } - *backslash_counter = 0; return UNICODE (n); } } @@ -1299,17 +1278,15 @@ phase5_get (token_ty *tp) { struct mixed_string_buffer literal; int quote_char; - unsigned int backslash_counter; case '"': case '\'': quote_char = c; lexical_context = lc_string; - backslash_counter = 0; /* Start accumulating the string. */ init_mixed_string_buffer (&literal, lc_string); for (;;) { - int uc = phase7_getuc (quote_char, &backslash_counter); + int uc = phase7_getuc (quote_char); if (uc == P7_EOF || uc == P7_STRING_END) break;