diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2015-08-12 00:48:11 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2015-08-12 00:48:11 -0400 |
commit | 8a0258c31808c514755e3bba03cb052084c4887c (patch) | |
tree | 1f42eed6f6c314d012b28ec521e87e9b032307de /src/backend/regex/regcomp.c | |
parent | 68fa28f77146653f1fcaa530d2f2f161bf5de479 (diff) | |
download | postgresql-8a0258c31808c514755e3bba03cb052084c4887c.tar.gz postgresql-8a0258c31808c514755e3bba03cb052084c4887c.zip |
Fix some possible low-memory failures in regexp compilation.
newnfa() failed to set the regex error state when malloc() fails.
Several places in regcomp.c failed to check for an error after calling
subre(). Each of these mistakes could lead to null-pointer-dereference
crashes in memory-starved backends.
Report and patch by Andreas Seltenreich. Back-patch to all branches.
Diffstat (limited to 'src/backend/regex/regcomp.c')
-rw-r--r-- | src/backend/regex/regcomp.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/regex/regcomp.c b/src/backend/regex/regcomp.c index ef1d35b0aa9..72b0d76af68 100644 --- a/src/backend/regex/regcomp.c +++ b/src/backend/regex/regcomp.c @@ -942,6 +942,7 @@ parseqatom(struct vars * v, NOERR(); assert(v->nextvalue > 0); atom = subre(v, 'b', BACKR, lp, rp); + NOERR(); subno = v->nextvalue; atom->subno = subno; EMPTYARC(lp, rp); /* temporarily, so there's something */ @@ -1076,6 +1077,7 @@ parseqatom(struct vars * v, /* break remaining subRE into x{...} and what follows */ t = subre(v, '.', COMBINE(qprefer, atom->flags), lp, rp); + NOERR(); t->left = atom; atomp = &t->left; @@ -1084,6 +1086,7 @@ parseqatom(struct vars * v, /* split top into prefix and remaining */ assert(top->op == '=' && top->left == NULL && top->right == NULL); top->left = subre(v, '=', top->flags, top->begin, lp); + NOERR(); top->op = '.'; top->right = t; |