summaryrefslogtreecommitdiff
path: root/jsmn.c
diff options
context:
space:
mode:
authorSerge A. Zaitsev <zaitsev.serge@gmail.com>2014-11-17 16:21:36 +0200
committerSerge A. Zaitsev <zaitsev.serge@gmail.com>2014-11-17 16:21:36 +0200
commitcf38b7d17157ba674199238da776d822b184c154 (patch)
tree653e5451665f48070a31988f532a2603b7691d00 /jsmn.c
parent91d7389ec80c742a589bfed25e62aa5f95d2f0f9 (diff)
added js string boundaries checks for string parser, fixes issue #31; added tests to cover it; fixed makefile to use custom cflags/ldflags
Diffstat (limited to 'jsmn.c')
-rw-r--r--jsmn.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/jsmn.c b/jsmn.c
index 83353bd01..a0f4f69c6 100644
--- a/jsmn.c
+++ b/jsmn.c
@@ -113,8 +113,8 @@ static jsmnerr_t jsmn_parse_string(jsmn_parser *parser, const char *js,
}
/* Backslash: Quoted symbol expected */
- if (c == '\\') {
- int i = 0;
+ if (c == '\\' && parser->pos + 1 < len) {
+ int i;
parser->pos++;
switch (js[parser->pos]) {
/* Allowed escaped symbols */
@@ -124,7 +124,7 @@ static jsmnerr_t jsmn_parse_string(jsmn_parser *parser, const char *js,
/* Allows escaped symbol \uXXXX */
case 'u':
parser->pos++;
- for(; i < 4 && js[parser->pos] != '\0'; i++) {
+ for(i = 0; i < 4 && parser->pos < len && js[parser->pos] != '\0'; i++) {
/* If it isn't a hex character we have an error */
if(!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */
(js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */