Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix bogus affix-merging code.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 12 Apr 2018 22:39:51 +0000 (18:39 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 12 Apr 2018 22:39:51 +0000 (18:39 -0400)
NISortAffixes() compared successive compound affixes incorrectly,
thus possibly failing to merge identical affixes, or (less likely)
merging ones that shouldn't be merged.  The user-visible effects
of this are unclear, to me anyway.

Per bug #15150 from Alexander Lakhin.  It's been broken for a long time,
so back-patch to all supported branches.

Arthur Zakirov

Discussion: https://postgr.es/m/152353327780.31225.13445405496721177988@wrigleys.postgresql.org

src/backend/tsearch/spell.c

index 28fe987e1035ac09f9ac650b1093536a9848eb7c..40401b3291e6edc29ae2b2023965d7fbd0f81926 100644 (file)
@@ -1370,8 +1370,10 @@ NISortAffixes(IspellDict *Conf)
        if ((Affix->flagflags & FF_COMPOUNDFLAG) && Affix->replen > 0 &&
            isAffixInUse(Conf, (char) Affix->flag))
        {
+           bool        issuffix = (Affix->type == FF_SUFFIX);
+
            if (ptr == Conf->CompoundAffix ||
-               ptr->issuffix != (ptr - 1)->issuffix ||
+               issuffix != (ptr - 1)->issuffix ||
                strbncmp((const unsigned char *) (ptr - 1)->affix,
                         (const unsigned char *) Affix->repl,
                         (ptr - 1)->len))
@@ -1379,7 +1381,7 @@ NISortAffixes(IspellDict *Conf)
                /* leave only unique and minimals suffixes */
                ptr->affix = Affix->repl;
                ptr->len = Affix->replen;
-               ptr->issuffix = (Affix->type == FF_SUFFIX) ? true : false;
+               ptr->issuffix = issuffix;
                ptr++;
            }
        }