From 8d7f458743c2e37f15f58a38a67a85c3a8bb5f3d Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Mon, 15 Jul 2002 23:49:57 -0400 Subject: [PATCH] parse.c (uuid_parse): Fix uuid parsing bug which didn't complain for certain types of invalid input text. (Addresses Debian bug #152891). tst_uuid.c: Add test cases for invalid text strings passed to uuid_parse. --- lib/uuid/ChangeLog | 9 +++++++++ lib/uuid/Makefile.in | 2 +- lib/uuid/parse.c | 5 ++++- lib/uuid/tst_uuid.c | 29 +++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/lib/uuid/ChangeLog b/lib/uuid/ChangeLog index 42b91d85d..3030246e2 100644 --- a/lib/uuid/ChangeLog +++ b/lib/uuid/ChangeLog @@ -1,3 +1,12 @@ +2002-07-15 Theodore Ts'o + + * parse.c (uuid_parse): Fix uuid parsing bug which didn't complain + for certain types of invalid input text. (Addresses + Debian bug #152891). + + * tst_uuid.c: Add test cases for invalid text strings passed to + uuid_parse. + 2002-03-08 Theodore Tso * Release of E2fsprogs 1.27 diff --git a/lib/uuid/Makefile.in b/lib/uuid/Makefile.in index 2c20e89a1..5f2d42343 100644 --- a/lib/uuid/Makefile.in +++ b/lib/uuid/Makefile.in @@ -88,7 +88,7 @@ tst_uuid.o: $(srcdir)/tst_uuid.c $(CC) $(ALL_CFLAGS) -c $(srcdir)/tst_uuid.c -o tst_uuid.o tst_uuid: tst_uuid.o $(DEPLIBUUID) - $(CC) $(ALL_LDFLAGS) -o tst_uuid tst_uuid.o $(LIBUUID) + $(CC) $(ALL_LDFLAGS) -o tst_uuid tst_uuid.o $(OBJS) uuid_time: $(srcdir)/uuid_time.c $(DEPLIBUUID) $(CC) $(ALL_CFLAGS) -DDEBUG -o uuid_time $(srcdir)/uuid_time.c \ diff --git a/lib/uuid/parse.c b/lib/uuid/parse.c index 13d529733..f97f13ea4 100644 --- a/lib/uuid/parse.c +++ b/lib/uuid/parse.c @@ -27,9 +27,12 @@ int uuid_parse(const char *in, uuid_t uu) return -1; for (i=0, cp = in; i <= 36; i++,cp++) { if ((i == 8) || (i == 13) || (i == 18) || - (i == 23)) + (i == 23)) { if (*cp == '-') continue; + else + return -1; + } if (i== 36) if (*cp == 0) continue; diff --git a/lib/uuid/tst_uuid.c b/lib/uuid/tst_uuid.c index 1785c88fd..f1f56f16a 100644 --- a/lib/uuid/tst_uuid.c +++ b/lib/uuid/tst_uuid.c @@ -13,6 +13,23 @@ #include "uuid.h" +static int test_uuid(const char * uuid, int isValid) +{ + static const char * validStr[2] = {"invalid", "valid"}; + uuid_t uuidBits; + int parsedOk; + + parsedOk = uuid_parse(uuid, uuidBits) == 0; + + printf("%s is %s", uuid, validStr[isValid]); + if (parsedOk != isValid) { + printf(" but uuid_parse says %s\n", validStr[parsedOk]); + return 1; + } + printf(", OK\n"); + return 0; +} + int main(int argc, char **argv) { @@ -107,6 +124,18 @@ main(int argc, char **argv) printf("UUID copy and compare failed!\n"); failed++; } + failed += test_uuid("84949cc5-4701-4a84-895b-354c584a981b", 1); + failed += test_uuid("84949CC5-4701-4A84-895B-354C584A981B", 1); + failed += test_uuid("84949cc5-4701-4a84-895b-354c584a981bc", 0); + failed += test_uuid("84949cc5-4701-4a84-895b-354c584a981", 0); + failed += test_uuid("84949cc5x4701-4a84-895b-354c584a981b", 0); + failed += test_uuid("84949cc504701-4a84-895b-354c584a981b", 0); + failed += test_uuid("84949cc5-470104a84-895b-354c584a981b", 0); + failed += test_uuid("84949cc5-4701-4a840895b-354c584a981b", 0); + failed += test_uuid("84949cc5-4701-4a84-895b0354c584a981b", 0); + failed += test_uuid("g4949cc5-4701-4a84-895b-354c584a981b", 0); + failed += test_uuid("84949cc5-4701-4a84-895b-354c584a981g", 0); + if (failed) { printf("%d failures.\n", failed); exit(1); -- 2.47.2