Check for buffer EOF in scanner (#3753)
This commit is contained in:
parent
b3e5f76788
commit
528f90adfb
|
@ -142,14 +142,17 @@ PJ_DEF(void) pj_scan_skip_whitespace( pj_scanner *scanner )
|
|||
{
|
||||
register char *s = scanner->curptr;
|
||||
|
||||
while (PJ_SCAN_IS_SPACE(*s)) {
|
||||
while (PJ_SCAN_CHECK_EOF(s) && PJ_SCAN_IS_SPACE(*s)) {
|
||||
++s;
|
||||
}
|
||||
|
||||
if (PJ_SCAN_IS_NEWLINE(*s) && (scanner->skip_ws & PJ_SCAN_AUTOSKIP_NEWLINE)) {
|
||||
for (;;) {
|
||||
if (PJ_SCAN_CHECK_EOF(s) && PJ_SCAN_IS_NEWLINE(*s) &&
|
||||
(scanner->skip_ws & PJ_SCAN_AUTOSKIP_NEWLINE))
|
||||
{
|
||||
for (; PJ_SCAN_CHECK_EOF(s); ) {
|
||||
if (*s == '\r') {
|
||||
++s;
|
||||
if (!PJ_SCAN_CHECK_EOF(s)) break;
|
||||
if (*s == '\n') ++s;
|
||||
++scanner->line;
|
||||
scanner->curptr = scanner->start_line = s;
|
||||
|
@ -160,30 +163,33 @@ PJ_DEF(void) pj_scan_skip_whitespace( pj_scanner *scanner )
|
|||
} else if (PJ_SCAN_IS_SPACE(*s)) {
|
||||
do {
|
||||
++s;
|
||||
} while (PJ_SCAN_IS_SPACE(*s));
|
||||
} while (PJ_SCAN_CHECK_EOF(s) && PJ_SCAN_IS_SPACE(*s));
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (PJ_SCAN_IS_NEWLINE(*s) && (scanner->skip_ws & PJ_SCAN_AUTOSKIP_WS_HEADER)==PJ_SCAN_AUTOSKIP_WS_HEADER) {
|
||||
if (PJ_SCAN_CHECK_EOF(s) && PJ_SCAN_IS_NEWLINE(*s) &&
|
||||
(scanner->skip_ws & PJ_SCAN_AUTOSKIP_WS_HEADER)==
|
||||
PJ_SCAN_AUTOSKIP_WS_HEADER)
|
||||
{
|
||||
/* Check for header continuation. */
|
||||
scanner->curptr = s;
|
||||
|
||||
if (*s == '\r') {
|
||||
++s;
|
||||
}
|
||||
if (*s == '\n') {
|
||||
if (PJ_SCAN_CHECK_EOF(s) && *s == '\n') {
|
||||
++s;
|
||||
}
|
||||
scanner->start_line = s;
|
||||
|
||||
if (PJ_SCAN_IS_SPACE(*s)) {
|
||||
if (PJ_SCAN_CHECK_EOF(s) && PJ_SCAN_IS_SPACE(*s)) {
|
||||
register char *t = s;
|
||||
do {
|
||||
++t;
|
||||
} while (PJ_SCAN_IS_SPACE(*t));
|
||||
} while (PJ_SCAN_CHECK_EOF(t) && PJ_SCAN_IS_SPACE(*t));
|
||||
|
||||
++scanner->line;
|
||||
scanner->curptr = t;
|
||||
|
@ -220,8 +226,7 @@ PJ_DEF(int) pj_scan_peek( pj_scanner *scanner,
|
|||
return -1;
|
||||
}
|
||||
|
||||
/* Don't need to check EOF with PJ_SCAN_CHECK_EOF(s) */
|
||||
while (pj_cis_match(spec, *s))
|
||||
while (PJ_SCAN_CHECK_EOF(s) && pj_cis_match(spec, *s))
|
||||
++s;
|
||||
|
||||
pj_strset3(out, scanner->curptr, s);
|
||||
|
@ -277,17 +282,15 @@ PJ_DEF(void) pj_scan_get( pj_scanner *scanner,
|
|||
|
||||
do {
|
||||
++s;
|
||||
} while (pj_cis_match(spec, *s));
|
||||
/* No need to check EOF here (PJ_SCAN_CHECK_EOF(s)) because
|
||||
* buffer is NULL terminated and pj_cis_match(spec,0) should be
|
||||
* false.
|
||||
*/
|
||||
} while (PJ_SCAN_CHECK_EOF(s) && pj_cis_match(spec, *s));
|
||||
|
||||
pj_strset3(out, scanner->curptr, s);
|
||||
|
||||
scanner->curptr = s;
|
||||
|
||||
if (PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws) {
|
||||
if (!pj_scan_is_eof(scanner) &&
|
||||
PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws)
|
||||
{
|
||||
pj_scan_skip_whitespace(scanner);
|
||||
}
|
||||
}
|
||||
|
@ -330,18 +333,20 @@ PJ_DEF(void) pj_scan_get_unescape( pj_scanner *scanner,
|
|||
char *start = s;
|
||||
do {
|
||||
++s;
|
||||
} while (pj_cis_match(spec, *s));
|
||||
} while (PJ_SCAN_CHECK_EOF(s) && pj_cis_match(spec, *s));
|
||||
|
||||
if (dst != start) pj_memmove(dst, start, s-start);
|
||||
dst += (s-start);
|
||||
}
|
||||
|
||||
} while (*s == '%');
|
||||
} while (PJ_SCAN_CHECK_EOF(s) && (*s == '%'));
|
||||
|
||||
scanner->curptr = s;
|
||||
out->slen = (dst - out->ptr);
|
||||
|
||||
if (PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws) {
|
||||
if (!pj_scan_is_eof(scanner) &&
|
||||
PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws)
|
||||
{
|
||||
pj_scan_skip_whitespace(scanner);
|
||||
}
|
||||
}
|
||||
|
@ -422,7 +427,9 @@ PJ_DEF(void) pj_scan_get_quotes(pj_scanner *scanner,
|
|||
|
||||
scanner->curptr = s;
|
||||
|
||||
if (PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws) {
|
||||
if (!pj_scan_is_eof(scanner) &&
|
||||
PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws)
|
||||
{
|
||||
pj_scan_skip_whitespace(scanner);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue