From: Theodore Ts'o Date: Tue, 16 Jul 2002 03:49:57 +0000 (-0400) Subject: parse.c (uuid_parse): Fix uuid parsing bug which didn't complain X-Git-Tag: E2FSPROGS-1.28-WIP-0817~32 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=8d7f458743c2e37f15f58a38a67a85c3a8bb5f3d;p=tools%2Fe2fsprogs.git 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. --- diff --git a/lib/uuid/ChangeLog b/lib/uuid/ChangeLog index 42b91d8..3030246 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 2c20e89..5f2d423 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 13d5297..f97f13e 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 1785c88..f1f56f1 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);