From: David Bremner Date: Sun, 23 Oct 2011 20:52:19 +0000 (-0300) Subject: xregcomp: don't consider every regex compilation failure an internal error. X-Git-Tag: 0.10_rc1~60 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=7a87830f5eb32373bc17235e9d178d383830dc64;hp=1dedfc90f6eee7cad10f1a1ceb39a7a1c4dbd1b1 xregcomp: don't consider every regex compilation failure an internal error. This pushes the error handling up one step, but makes the function more flexible. Running out of memory still triggers an internal error, in the spirit of other xutils functions. --- diff --git a/notmuch-restore.c b/notmuch-restore.c index ff1ebab1..13b4325a 100644 --- a/notmuch-restore.c +++ b/notmuch-restore.c @@ -88,9 +88,10 @@ notmuch_restore_command (unused (void *ctx), int argc, char *argv[]) * non-space characters for the message-id, then one or more * spaces, then a list of space-separated tags as a sequence of * characters within literal '(' and ')'. */ - xregcomp (®ex, - "^([^ ]+) \\(([^)]*)\\)$", - REG_EXTENDED); + if ( xregcomp (®ex, + "^([^ ]+) \\(([^)]*)\\)$", + REG_EXTENDED) ) + INTERNAL_ERROR("compile time constant regex failed."); while ((line_len = getline (&line, &line_size, input)) != -1) { regmatch_t match[3]; diff --git a/util/xutil.c b/util/xutil.c index 15ff7650..ac496daf 100644 --- a/util/xutil.c +++ b/util/xutil.c @@ -99,7 +99,7 @@ xstrndup (const char *s, size_t n) return ret; } -void +int xregcomp (regex_t *preg, const char *regex, int cflags) { int rerr; @@ -110,9 +110,12 @@ xregcomp (regex_t *preg, const char *regex, int cflags) char *error = xmalloc (error_size); regerror (rerr, preg, error, error_size); - INTERNAL_ERROR ("compiling regex %s: %s\n", + fprintf (stderr, "compiling regex %s: %s\n", regex, error); + free (error); + return 1; } + return 0; } int diff --git a/util/xutil.h b/util/xutil.h index fd77f733..92992564 100644 --- a/util/xutil.h +++ b/util/xutil.h @@ -43,7 +43,8 @@ xstrdup (const char *s); char * xstrndup (const char *s, size_t n); -void +/* Returns 0 for successful compilation, 1 otherwise */ +int xregcomp (regex_t *preg, const char *regex, int cflags); int