From 950b6ab02272057811dcb4cdf2edcdc2f01b81b7 Mon Sep 17 00:00:00 2001 From: "Marc G. Fournier" Date: Tue, 9 Jul 1996 06:39:19 +0000 Subject: [PATCH] Fixes: Using LIKE or ~ operator on text type files which are null valued causes segmentation fault. Thanks to: Salvador Ortiz Garcia, Robert Patrick, Paul 'Shag' Walmsley, and James Cooper for finding and fixing the problem. --- src/backend/utils/adt/like.c | 4 +++- src/backend/utils/adt/regexp.c | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c index e33e66ee62..4560b6d80d 100644 --- a/src/backend/utils/adt/like.c +++ b/src/backend/utils/adt/like.c @@ -120,6 +120,7 @@ char16nlike(char *s, struct varlena *p) bool namelike(NameData *n, struct varlena *p) { + if (!n) return FALSE; return (fixedlen_like(n->data, p, NAMEDATALEN)); } @@ -132,6 +133,7 @@ namenlike(NameData *s, struct varlena *p) bool textlike(struct varlena *s, struct varlena *p) { + if (!s) return FALSE; return (fixedlen_like(VARDATA(s), p, VARSIZE(s) - VARHDRSZ)); } @@ -141,7 +143,7 @@ bool textnlike(struct varlena *s, struct varlena *p) } -/* $Revision: 1.1.1.1 $ +/* $Revision: 1.2 $ ** "like.c" A first attempt at a LIKE operator for Postgres95. ** ** Originally written by Rich $alz, mirror!rs, Wed Nov 26 19:03:17 EST 1986. diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c index 4b5a008903..670ad48f6c 100644 --- a/src/backend/utils/adt/regexp.c +++ b/src/backend/utils/adt/regexp.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.1.1.1 1996/07/09 06:22:05 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.2 1996/07/09 06:39:19 scrappy Exp $ * * Alistair Crooks added the code for the regex caching * agc - cached the regular expressions used - there's a good chance @@ -240,6 +240,7 @@ char16regexne(char *s, struct varlena *p) bool nameregexeq(NameData *n, struct varlena *p) { + if (!n) return FALSE; return (fixedlen_regexeq(n->data, p, NAMEDATALEN, REG_EXTENDED)); } bool @@ -251,6 +252,7 @@ nameregexne(NameData *s, struct varlena *p) bool textregexeq(struct varlena *s, struct varlena *p) { + if (!s) return (FALSE); return (fixedlen_regexeq(VARDATA(s), p, VARSIZE(s) - VARHDRSZ, REG_EXTENDED)); } @@ -319,6 +321,7 @@ char16icregexne(char *s, struct varlena *p) bool texticregexeq(struct varlena *s, struct varlena *p) { + if (!s) return FALSE; return (fixedlen_regexeq(VARDATA(s), p, VARSIZE(s) - VARHDRSZ, REG_ICASE | REG_EXTENDED)); } @@ -332,6 +335,7 @@ texticregexne(struct varlena *s, struct varlena *p) bool nameicregexeq(NameData *n, struct varlena *p) { + if (!n) return FALSE; return (fixedlen_regexeq(n->data, p, NAMEDATALEN, REG_ICASE | REG_EXTENDED)); } -- 2.11.0