diff options
author | Petr Štetiar <ynezz@true.cz> | 2020-01-18 20:32:55 +0300 |
---|---|---|
committer | Petr Štetiar <ynezz@true.cz> | 2020-01-20 18:54:10 +0300 |
commit | 5c0faaf4f5e26180dcc31b7e8558d57426d84085 (patch) | |
tree | 332940834d2e8ec9a8e9ac219db908d9188b2834 /tests/test-blobmsg-procd-instance.c | |
parent | 1ffa41535369f5bb67d1eb5bdcb306671ca1d2e4 (diff) |
tests: prefer dynamically allocated buffers
Help detecting Valgrind OOB reads and other issues.
Conditional jump or move depends on uninitialised value(s)
at 0x5452886: blobmsg_parse (blobmsg.c:203)
by 0x400A8E: test_blobmsg (tests/test-blobmsg-parse.c:66)
by 0x400A8E: main (tests/test-blobmsg-parse.c:82)
Conditional jump or move depends on uninitialised value(s)
at 0x545247F: blobmsg_check_name (blobmsg.c:39)
by 0x545247F: blobmsg_check_attr_len (blobmsg.c:79)
by 0x5452710: blobmsg_parse_array (blobmsg.c:159)
by 0x400AB8: test_blobmsg (tests/test-blobmsg-parse.c:69)
by 0x400AB8: main (tests/test-blobmsg-parse.c:82)
Conditional jump or move depends on uninitialised value(s)
at 0x54524A0: blobmsg_check_name (blobmsg.c:42)
by 0x54524A0: blobmsg_check_attr_len (blobmsg.c:79)
by 0x5452710: blobmsg_parse_array (blobmsg.c:159)
by 0x400AB8: test_blobmsg (tests/test-blobmsg-parse.c:69)
by 0x400AB8: main (tests/test-blobmsg-parse.c:82)
Ref: http://lists.infradead.org/pipermail/openwrt-devel/2020-January/021204.html
Signed-off-by: Petr Štetiar <ynezz@true.cz>
Diffstat (limited to 'tests/test-blobmsg-procd-instance.c')
-rw-r--r-- | tests/test-blobmsg-procd-instance.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/tests/test-blobmsg-procd-instance.c b/tests/test-blobmsg-procd-instance.c index a5b4706..d6d905f 100644 --- a/tests/test-blobmsg-procd-instance.c +++ b/tests/test-blobmsg-procd-instance.c @@ -63,9 +63,9 @@ static void test_blobmsg_procd_instance(const char *filename) { #define BUF_LEN 2048 int r = 0; - FILE *fd = NULL; size_t len = 0; - char buf[BUF_LEN+1] = { 0 }; + FILE *fd = NULL; + char *buf = NULL; struct blob_attr *tb[__INSTANCE_ATTR_MAX]; const char *fname = basename((char *) filename); @@ -75,26 +75,32 @@ static void test_blobmsg_procd_instance(const char *filename) return; } - len = fread(&buf, 1, BUF_LEN, fd); + buf = malloc(BUF_LEN+1); + if (!buf) + return; + + len = fread(buf, 1, BUF_LEN, fd); fclose(fd); r = blobmsg_parse(instance_attr, __INSTANCE_ATTR_MAX, tb, buf, len); if (r) - return; + goto out; if (!tb[INSTANCE_ATTR_COMMAND] || !tb[INSTANCE_ATTR_NICE] || !tb[INSTANCE_ATTR_STDERR]) - return; + goto out; if (!blobmsg_check_attr_list(tb[INSTANCE_ATTR_COMMAND], BLOBMSG_TYPE_STRING)) - return; + goto out; if (blobmsg_get_u32(tb[INSTANCE_ATTR_NICE]) != 19) - return; + goto out; if (!blobmsg_get_bool(tb[INSTANCE_ATTR_STDERR])) - return; + goto out; fprintf(stderr, "%s: OK\n", fname); +out: + free(buf); } int main(int argc, char *argv[]) |