make regex wrapper return errors instead of just aborting

This commit is contained in:
Vincent Sanders 2014-10-25 23:06:18 +01:00
parent df89f689f7
commit e39606c411
4 changed files with 17 additions and 8 deletions

View File

@ -44,10 +44,12 @@ struct url_components_internal {
regex_t url_re, url_up_re;
/* exported interface documented in utils/url.h */
void url_init(void)
nserror url_init(void)
{
nserror ret;
/* regex from RFC 2396 */
regcomp_wrapper(&url_re, "^[[:space:]]*"
ret = regcomp_wrapper(&url_re, "^[[:space:]]*"
#define URL_RE_SCHEME 2
"(([a-zA-Z][-a-zA-Z0-9+.]*):)?"
#define URL_RE_AUTHORITY 4
@ -59,7 +61,11 @@ void url_init(void)
#define URL_RE_FRAGMENT 9
"(#([^[:space:]]*))?"
"[[:space:]]*$", REG_EXTENDED);
regcomp_wrapper(&url_up_re,
if (ret != NSERROR_OK) {
return ret;
}
return regcomp_wrapper(&url_up_re,
"/([^/]?|[.][^./]|[^./][.]|[^./][^./]|[^/][^/][^/]+)"
"/[.][.](/|$)",
REG_EXTENDED);

View File

@ -49,7 +49,7 @@ struct url_components {
*
* Compiles regular expressions required by the url_ functions.
*/
void url_init(void);
nserror url_init(void);
/**

View File

@ -33,6 +33,7 @@
#include <time.h>
#include "utils/config.h"
#include "utils/log.h"
#include "utils/messages.h"
#include "utils/utf8.h"
#include "utils/time.h"
@ -207,18 +208,20 @@ nserror snstrjoin(char **str, size_t *size, char sep, size_t nelm, ...)
/* exported interface documented in utils/utils.h */
void regcomp_wrapper(regex_t *preg, const char *regex, int cflags)
nserror regcomp_wrapper(regex_t *preg, const char *regex, int cflags)
{
int r;
r = regcomp(preg, regex, cflags);
if (r) {
char errbuf[200];
regerror(r, preg, errbuf, sizeof errbuf);
fprintf(stderr, "Failed to compile regexp '%s'\n", regex);
die(errbuf);
LOG(("Failed to compile regexp '%s': %s\n", regex, errbuf));
return NSERROR_INIT_FAILED;
}
return NSERROR_OK;
}
/**
* The size of buffers within human_friendly_bytesize.
*

View File

@ -163,7 +163,7 @@ bool is_dir(const char *path);
*
* Parameters as for regcomp(), see man regex.
*/
void regcomp_wrapper(regex_t *preg, const char *regex, int cflags);
nserror regcomp_wrapper(regex_t *preg, const char *regex, int cflags);
/**
* Create a human redable representation of a size in bytes.