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));
}