From e652d771128e1a92396c63325edff326a6d3d881 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Tue, 17 Apr 2007 17:41:28 +0000 Subject: [PATCH] More tests for trailing NULs. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20370 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/asn1/check-der.c | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/lib/asn1/check-der.c b/lib/asn1/check-der.c index e21c436b1..fdbc6a298 100644 --- a/lib/asn1/check-der.c +++ b/lib/asn1/check-der.c @@ -532,7 +532,7 @@ static int check_fail_general_string(void) { struct test_case tests[] = { - { NULL, 3, "A\x00B", "NUL char in string"} + { NULL, 3, "A\x00i", "NUL char in string"} }; int ntests = sizeof(tests) / sizeof(*tests); @@ -749,6 +749,46 @@ test_heim_oid_format(void) return ret; } +static int +check_trailing_nul(void) +{ + int i, ret; + struct { + int fail; + const unsigned char *p; + size_t len; + const char *s; + size_t size; + } foo[] = { + { 1, (const unsigned char *)"foo\x00o", 5, NULL, 0 }, + { 1, (const unsigned char *)"\x00o", 2, NULL, 0 }, + { 0, (const unsigned char *)"\x00\x00\x00\x00\x00", 5, "", 5 }, + { 0, (const unsigned char *)"foo\x00\x00", 5, "foo", 5 }, + { 0, (const unsigned char *)"foo\0", 4, "foo", 4 }, + { 0, (const unsigned char *)"foo", 3, "foo", 3 } + }; + + for (i = 0; i < sizeof(foo)/sizeof(foo[0]); i++) { + char *s; + size_t size; + ret = der_get_general_string(foo[i].p, foo[i].len, &s, &size); + if (foo[i].fail) { + if (ret == 0) + errx(1, "check %d NULL didn't fail", i); + continue; + } + if (ret) + errx(1, "NULL check %d der_get_general_string failed", i); + if (foo[i].size != size) + errx(1, "NUL check i = %d size failed", i); + if (strcmp(foo[i].s, s) != 0) + errx(1, "NUL check i = %d content failed", i); + free(s); + } + return 0; +} + + int main(int argc, char **argv) { @@ -778,6 +818,7 @@ main(int argc, char **argv) ret += check_fail_bitstring(); ret += test_heim_int_format(); ret += test_heim_oid_format(); + ret += check_trailing_nul(); return ret; }