[augeas-devel] augeas: master - * src/lens.c (restrict_regexp): properly report OOM
David Lutterkort
lutter at fedoraproject.org
Sun Jan 24 04:35:48 UTC 2010
Gitweb: http://git.fedorahosted.org/git/augeas.git?p=augeas.git;a=commitdiff;h=d4514754cb98888ece95e88aadaeed8224712898
Commit: d4514754cb98888ece95e88aadaeed8224712898
Parent: 6170b048753a0d3801ccd7a6fdf32d06bf3d3111
Author: David Lutterkort <lutter at redhat.com>
AuthorDate: Tue Jan 19 12:14:11 2010 -0800
Committer: David Lutterkort <lutter at redhat.com>
CommitterDate: Sat Jan 23 20:35:11 2010 -0800
* src/lens.c (restrict_regexp): properly report OOM
---
src/lens.c | 27 +++++++++++++++------------
1 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/src/lens.c b/src/lens.c
index f65bb80..ace6e82 100644
--- a/src/lens.c
+++ b/src/lens.c
@@ -392,27 +392,30 @@ static struct regexp *make_regexp_from_string(struct info *info,
static struct regexp *restrict_regexp(struct regexp *r) {
char *nre = NULL;
+ struct regexp *result = NULL;
size_t nre_len;
int ret;
ret = fa_restrict_alphabet(r->pattern->str, strlen(r->pattern->str),
&nre, &nre_len,
RESERVED_FROM, RESERVED_TO);
- assert(nre_len == strlen(nre));
- // FIXME: Tell the user what's wrong
- if (ret != 0)
- return NULL;
+ ERR_NOMEM(ret == REG_ESPACE || ret < 0, r->info);
+ BUG_ON(ret != 0, r->info, NULL);
+ ensure(nre_len == strlen(nre), r->info);
ret = regexp_c_locale(&nre, &nre_len);
- if (ret < 0) {
- free(nre);
- return NULL;
- }
+ ERR_NOMEM(ret < 0, r->info);
- r = make_regexp(r->info, nre, r->nocase);
- if (regexp_compile(r) != 0)
- abort();
- return r;
+ result = make_regexp(r->info, nre, r->nocase);
+ nre = NULL;
+ BUG_ON(regexp_compile(result) != 0, r->info,
+ "Could not compile restricted regexp");
+ done:
+ free(nre);
+ return result;
+ error:
+ unref(result, regexp);
+ goto done;
}
struct value *lns_make_prim(enum lens_tag tag, struct info *info,
More information about the augeas-devel
mailing list