diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2016-01-20 14:58:53 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-01-20 17:09:18 -0800 |
commit | a3d601fcc2f94fd1583053a1b1aea5de66ffc79c (patch) | |
tree | 1fc6649b564daf5a6cfe3622eb2bbaf66bbeba6e /lib/test_hexdump.c | |
parent | 3db4a987180acfba3bc117575bfedb81e055778c (diff) | |
download | lwn-a3d601fcc2f94fd1583053a1b1aea5de66ffc79c.tar.gz lwn-a3d601fcc2f94fd1583053a1b1aea5de66ffc79c.zip |
test_hexdump: go through all possible lengths of buffer
When test for overflow do iterate the buffer length in a range 0 ..
BUF_SIZE.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib/test_hexdump.c')
-rw-r--r-- | lib/test_hexdump.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/lib/test_hexdump.c b/lib/test_hexdump.c index 1ecdb97b370c..940b1d318831 100644 --- a/lib/test_hexdump.c +++ b/lib/test_hexdump.c @@ -133,17 +133,16 @@ static void __init test_hexdump_set(int rowsize, bool ascii) test_hexdump(len, rowsize, 1, ascii); } -static void __init test_hexdump_overflow(bool ascii) +static void __init test_hexdump_overflow(size_t buflen, bool ascii) { - char buf[56]; + char buf[TEST_HEXDUMP_BUF_SIZE]; const char *t = test_data_1_le[0]; - size_t l = get_random_int() % sizeof(buf); bool a; int e, r; memset(buf, FILL_CHAR, sizeof(buf)); - r = hex_dump_to_buffer(data_b, 1, 16, 1, buf, l, ascii); + r = hex_dump_to_buffer(data_b, 1, 16, 1, buf, buflen, ascii); if (ascii) e = 50; @@ -151,15 +150,15 @@ static void __init test_hexdump_overflow(bool ascii) e = 2; buf[e + 2] = '\0'; - if (!l) { + if (!buflen) { a = r == e && buf[0] == FILL_CHAR; - } else if (l < 3) { + } else if (buflen < 3) { a = r == e && buf[0] == '\0'; - } else if (l < 4) { + } else if (buflen < 4) { a = r == e && !strcmp(buf, t); } else if (ascii) { - if (l < 51) - a = r == e && buf[l - 1] == '\0' && buf[l - 2] == FILL_CHAR; + if (buflen < 51) + a = r == e && buf[buflen - 1] == '\0' && buf[buflen - 2] == FILL_CHAR; else a = r == e && buf[50] == '\0' && buf[49] == '.'; } else { @@ -167,7 +166,7 @@ static void __init test_hexdump_overflow(bool ascii) } if (!a) { - pr_err("Len: %zu rc: %u strlen: %zu\n", l, r, strlen(buf)); + pr_err("Len: %zu rc: %u strlen: %zu\n", buflen, r, strlen(buf)); pr_err("Result: '%s'\n", buf); } } @@ -187,11 +186,11 @@ static int __init test_hexdump_init(void) for (i = 0; i < 16; i++) test_hexdump_set(rowsize, true); - for (i = 0; i < 16; i++) - test_hexdump_overflow(false); + for (i = 0; i <= TEST_HEXDUMP_BUF_SIZE; i++) + test_hexdump_overflow(i, false); - for (i = 0; i < 16; i++) - test_hexdump_overflow(true); + for (i = 0; i <= TEST_HEXDUMP_BUF_SIZE; i++) + test_hexdump_overflow(i, true); return -EINVAL; } |