Merge branch 'rj/test-regex' into maint-1.7.11
authorJunio C Hamano <gitster@pobox.com>
Sat, 15 Sep 2012 03:46:39 +0000 (20:46 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sat, 15 Sep 2012 03:46:39 +0000 (20:46 -0700)
* rj/test-regex:
test-regex: Add a test to check for a bug in the regex routines

.gitignore
Makefile
t/t0070-fundamental.sh
test-regex.c [new file with mode: 0644]
index bf66648e2c5f59cb92470dbda546c5348bcc85ef..f1acd3e777f5b8be846b3bdabf4743b84ad4fbca 100644 (file)
 /test-mktemp
 /test-parse-options
 /test-path-utils
+/test-regex
 /test-revision-walking
 /test-run-command
 /test-sha1
index 1f72c1c74548ff1622232132d1ff717855f007bc..13293d33fd1debc5a7dce38b7bf93ea9a89d11ca 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -495,6 +495,7 @@ TEST_PROGRAMS_NEED_X += test-mergesort
 TEST_PROGRAMS_NEED_X += test-mktemp
 TEST_PROGRAMS_NEED_X += test-parse-options
 TEST_PROGRAMS_NEED_X += test-path-utils
+TEST_PROGRAMS_NEED_X += test-regex
 TEST_PROGRAMS_NEED_X += test-revision-walking
 TEST_PROGRAMS_NEED_X += test-run-command
 TEST_PROGRAMS_NEED_X += test-scrap-cache-tree
index 9bee8bfd2e063c40bae2d76930370bd9e8ba8fa5..da2c504e53e37840f71790d6b262106b7b57d697 100755 (executable)
@@ -25,4 +25,9 @@ test_expect_success POSIXPERM 'mktemp to unwritable directory prints filename' '
        grep "cannotwrite/test" err
 '
 
+test_expect_success 'check for a bug in the regex routines' '
+       # if this test fails, re-build git with NO_REGEX=1
+       test-regex
+'
+
 test_done
diff --git a/test-regex.c b/test-regex.c
new file mode 100644 (file)
index 0000000..b5bfd54
--- /dev/null
@@ -0,0 +1,20 @@
+#include <git-compat-util.h>
+
+int main(int argc, char **argv)
+{
+       char *pat = "[^={} \t]+";
+       char *str = "={}\nfred";
+       regex_t r;
+       regmatch_t m[1];
+
+       if (regcomp(&r, pat, REG_EXTENDED | REG_NEWLINE))
+               die("failed regcomp() for pattern '%s'", pat);
+       if (regexec(&r, str, 1, m, 0))
+               die("no match of pattern '%s' to string '%s'", pat, str);
+
+       /* http://sourceware.org/bugzilla/show_bug.cgi?id=3957  */
+       if (m[0].rm_so == 3) /* matches '\n' when it should not */
+               die("regex bug confirmed: re-build git with NO_REGEX=1");
+
+       exit(0);
+}