It doesn't actually crash, it just fails CHECKARRVALID. I added an assertion
in there to cause it to generate a core dump.

Wow, catch that, see attached patch.

g_int_decompress doesn't returns detoasted array in case it was empty. Previously it was safe because empty array never has been toasted.

Should I commit it or you'll include in your patch?

--
Teodor Sigaev                                   E-mail: [EMAIL PROTECTED]
                                                   WWW: http://www.sigaev.ru/
*** ./contrib/intarray.orig/./_int_gist.c       Tue Mar  6 20:59:23 2007
--- ./contrib/intarray/./_int_gist.c    Tue Mar  6 21:41:54 2007
***************
*** 232,238 ****
--- 232,247 ----
  
        CHECKARRVALID(in);
        if (ARRISVOID(in))
+       {
+               if (in != (ArrayType *) DatumGetPointer(entry->key)) {
+                       retval = palloc(sizeof(GISTENTRY));
+                       gistentryinit(*retval, PointerGetDatum(in),
+                               entry->rel, entry->page, entry->offset, FALSE);
+                       PG_RETURN_POINTER(retval);
+               }
+ 
                PG_RETURN_POINTER(entry);
+       }
  
        lenin = ARRNELEMS(in);
  
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to