Date:

Thu Feb 29 08:37:06 PST 1996

Description

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.

Fix

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