diff --git a/src/backend/regex/regc_nfa.c b/src/backend/regex/regc_nfa.c
index 3487734a64ea9fcf4aebda1e18bad568cc4af443..27998d688a8f2a48c0e27dcab7da5dd4378861c6 100644
--- a/src/backend/regex/regc_nfa.c
+++ b/src/backend/regex/regc_nfa.c
@@ -52,7 +52,10 @@ newnfa(struct vars * v,
 
 	nfa = (struct nfa *) MALLOC(sizeof(struct nfa));
 	if (nfa == NULL)
+	{
+		ERR(REG_ESPACE);
 		return NULL;
+	}
 
 	nfa->states = NULL;
 	nfa->slast = NULL;
diff --git a/src/backend/regex/regcomp.c b/src/backend/regex/regcomp.c
index ef1d35b0aa9a84eacc4ca0537b329f93dfdf1567..72b0d76af689b6841ae5a4a611f0f400a134e765 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;