Module Name: src Committed By: christos Date: Sun Nov 6 18:34:48 UTC 2011
Modified Files: src/tests/lib/libc/regex: t_exhaust.c Log Message: - Print the symbolic error using regerror, as well as the pattern that caused it. - Add the ability to set the number of repetitions in the pattern from cpp since TRE handles things poorly: - It runs the machine out of memory with rep=9 (we use rep=9999) - It truncates the pattern with rep=9999 To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/tests/lib/libc/regex/t_exhaust.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/lib/libc/regex/t_exhaust.c diff -u src/tests/lib/libc/regex/t_exhaust.c:1.3 src/tests/lib/libc/regex/t_exhaust.c:1.4 --- src/tests/lib/libc/regex/t_exhaust.c:1.3 Fri Nov 4 11:48:10 2011 +++ src/tests/lib/libc/regex/t_exhaust.c Sun Nov 6 13:34:48 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: t_exhaust.c,v 1.3 2011/11/04 15:48:10 christos Exp $ */ +/* $NetBSD: t_exhaust.c,v 1.4 2011/11/06 18:34:48 christos Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: t_exhaust.c,v 1.3 2011/11/04 15:48:10 christos Exp $"); +__RCSID("$NetBSD: t_exhaust.c,v 1.4 2011/11/06 18:34:48 christos Exp $"); #include <stdio.h> #include <regex.h> @@ -46,6 +46,9 @@ __RCSID("$NetBSD: t_exhaust.c,v 1.3 2011 #include <err.h> #include <atf-c.h> +#ifndef REGEX_MAXSIZE +#define REGEX_MAXSIZE 9999 +#endif static char * mkstr(const char *str, size_t len) @@ -179,14 +182,18 @@ ATF_TC_BODY(regcomp_too_big, tc) int e; for (size_t i = 0; i < __arraycount(tests); i++) { - char *d = (*tests[i].pattern)(9999); + char *d = (*tests[i].pattern)(REGEX_MAXSIZE); e = regcomp(&re, d, tests[i].type); - free(d); if (e) { + char ebuf[1024]; + (void)regerror(e, &re, ebuf, sizeof(ebuf)); ATF_REQUIRE_MSG(e == REG_ESPACE, - "regcomp returned %d for pattern %zu", e, i); + "regcomp returned %d (%s) for pattern %zu [%s]", e, ebuf, + i, d); + free(d); continue; } + free(d); (void)regexec(&re, "aaaaaaaaaaa", 0, NULL, 0); regfree(&re); }