diff options
-rw-r--r-- | src/DSV.c | 11 | ||||
-rw-r--r-- | src/build.c | 2 |
2 files changed, 7 insertions, 6 deletions
@@ -117,17 +117,18 @@ int dsv_parse_next_line(struct dsv_ctx *context, const char *src, size_t len) { break; } + if (i >= context->fields_count) { + debug("DSV: too many fields\n"); + context->status = E_TOO_MANY_FIELDS; + goto error; + } + char *buf = xmalloc(size+1); decode_string(buf, start, size+1); context->fields[i] = buf; start += size + 1; ++i; - if (i > context->fields_count) { - debug("DSV: too many fields\n"); - context->status = E_TOO_MANY_FIELDS; - goto error; - } } if (i+1 < context->fields_count) { diff --git a/src/build.c b/src/build.c index 8903563..cd6f8dc 100644 --- a/src/build.c +++ b/src/build.c @@ -475,7 +475,7 @@ static int handle_c(dep_info *dep) { if (dsv_parse_file(&ctx, fp)) { retval = build_target(dep); - goto exit; + goto exit2; } errno = 0; |