]> granicus.if.org Git - postgresql/commitdiff
Fix synonym-dict breakage introduced in last patch :-(.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 25 Aug 2007 02:29:45 +0000 (02:29 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 25 Aug 2007 02:29:45 +0000 (02:29 +0000)
Minor other cleanups.

src/backend/tsearch/dict_synonym.c

index 1c0fd95413cd5f703b886a9c09e2efb69edf0073..89819eb7443651232b7dfe334307837256eae793 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/tsearch/dict_synonym.c,v 1.3 2007/08/25 00:03:59 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/tsearch/dict_synonym.c,v 1.4 2007/08/25 02:29:45 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -120,30 +120,31 @@ dsynonym_init(PG_FUNCTION_ARGS)
                        /* Empty line */
                        goto skipline;
                }
-               *end = '\0';
-               if (end >= line + strlen(line))
+               if (*end == '\0')
                {
                        /* A line with only one word. Ignore silently. */
                        goto skipline;
                }
+               *end = '\0';
 
                starto = findwrd(end + 1, &end);
                if (!starto)
                {
-                       /* A line with only one word. Ignore silently. */
+                       /* A line with only one word (+whitespace). Ignore silently. */
                        goto skipline;
                }
                *end = '\0';
 
-               /* starti now points to the first word, and starto to the second
+               /*
+                * starti now points to the first word, and starto to the second
                 * word on the line, with a \0 terminator at the end of both words.
                 */
 
-               if (cur == d->len)
+               if (cur >= d->len)
                {
                        if (d->len == 0)
                        {
-                               d->len = 16;
+                               d->len = 64;
                                d->syn = (Syn *) palloc(sizeof(Syn) * d->len);
                        }
                        else
@@ -180,7 +181,8 @@ dsynonym_lexize(PG_FUNCTION_ARGS)
                           *found;
        TSLexeme   *res;
 
-       if (len <= 0)
+       /* note: d->len test protects against Solaris bsearch-of-no-items bug */
+       if (len <= 0 || d->len <= 0)
                PG_RETURN_POINTER(NULL);
 
        key.in = lowerstr_with_len(in, len);