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.
Apply this patch.
Index: RELEASE.patchlevel =================================================================== RCS file: /usr/local/devel/pglite/cvs/src/RELEASE.patchlevel,v retrieving revision 1.7 diff -c -r1.7 RELEASE.patchlevel *** 1.7 1996/02/29 16:27:14 --- RELEASE.patchlevel 1996/02/29 16:27:55 *************** *** 3,10 **** ## This file is used to maintain sequencing of patches version: 1.01 ! patch level: 1 ! patch date: Wed Feb 28 08:33:28 PST 1996 --- 3,10 ---- ## This file is used to maintain sequencing of patches version: 1.01 ! patch level: 2 ! patch date: Thu Feb 29 08:18:25 PST 1996 Index: backend/utils/adt/like.c =================================================================== RCS file: /usr/local/devel/pglite/cvs/src/backend/utils/adt/like.c,v retrieving revision 1.2 diff -c -r1.2 like.c *** 1.2 1996/02/24 01:03:13 --- src/backend/utils/adt/like.c 1996/02/29 16:09:57 *************** *** 120,125 **** --- 120,126 ---- bool namelike(NameData *n, struct varlena *p) { + if (!n) return FALSE; return (fixedlen_like(n->data, p, NAMEDATALEN)); } *************** *** 132,137 **** --- 133,139 ---- bool textlike(struct varlena *s, struct varlena *p) { + if (!s) return FALSE; return (fixedlen_like(VARDATA(s), p, VARSIZE(s) - VARHDRSZ)); } Index: backend/utils/adt/regexp.c =================================================================== RCS file: /usr/local/devel/pglite/cvs/src/backend/utils/adt/regexp.c,v retrieving revision 1.14 diff -c -r1.14 regexp.c *** 1.14 1996/02/24 00:59:36 --- src/backend/utils/adt/regexp.c 1996/02/29 16:07:09 *************** *** 240,245 **** --- 240,246 ---- bool nameregexeq(NameData *n, struct varlena *p) { + if (!n) return FALSE; return (fixedlen_regexeq(n->data, p, NAMEDATALEN, REG_EXTENDED)); } bool *************** *** 251,256 **** --- 252,258 ---- bool textregexeq(struct varlena *s, struct varlena *p) { + if (!s) return (FALSE); return (fixedlen_regexeq(VARDATA(s), p, VARSIZE(s) - VARHDRSZ, REG_EXTENDED)); } *************** *** 319,324 **** --- 321,327 ---- 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,337 **** --- 335,341 ---- bool nameicregexeq(NameData *n, struct varlena *p) { + if (!n) return FALSE; return (fixedlen_regexeq(n->data, p, NAMEDATALEN, REG_ICASE | REG_EXTENDED)); }