Apply some of the fixes from PR #740, although by using size_t instead of castings.

This commit is contained in:
Eric Haszlakiewicz
2022-07-31 19:26:12 +00:00
parent 4b0c6de760
commit bdd5e03d6e
4 changed files with 33 additions and 28 deletions

View File

@@ -63,7 +63,7 @@ static int parseit(int fd, int (*callback)(struct json_object *))
{
struct json_object *obj;
char buf[32768];
int ret;
ssize_t ret;
int depth = JSON_TOKENER_DEFAULT_DEPTH;
json_tokener *tok;
@@ -86,20 +86,21 @@ static int parseit(int fd, int (*callback)(struct json_object *))
size_t total_read = 0;
while ((ret = read(fd, buf, sizeof(buf))) > 0)
{
total_read += ret;
int start_pos = 0;
while (start_pos != ret)
size_t retu = (size_t)ret; // We know it's positive
total_read += retu;
size_t start_pos = 0;
while (start_pos != retu)
{
obj = json_tokener_parse_ex(tok, &buf[start_pos], ret - start_pos);
obj = json_tokener_parse_ex(tok, &buf[start_pos], retu - start_pos);
enum json_tokener_error jerr = json_tokener_get_error(tok);
int parse_end = json_tokener_get_parse_end(tok);
size_t parse_end = json_tokener_get_parse_end(tok);
if (obj == NULL && jerr != json_tokener_continue)
{
const char *aterr = (start_pos + parse_end < (int)sizeof(buf)) ?
&buf[start_pos + parse_end] : "";
fflush(stdout);
int fail_offset = total_read - ret + start_pos + parse_end;
fprintf(stderr, "Failed at offset %d: %s %c\n", fail_offset,
size_t fail_offset = total_read - retu + start_pos + parse_end;
fprintf(stderr, "Failed at offset %lu: %s %c\n", (unsigned long)fail_offset,
json_tokener_error_desc(jerr), aterr[0]);
json_tokener_free(tok);
return 1;
@@ -115,7 +116,7 @@ static int parseit(int fd, int (*callback)(struct json_object *))
}
}
start_pos += json_tokener_get_parse_end(tok);
assert(start_pos <= ret);
assert(start_pos <= retu);
}
}
if (ret < 0)