1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-27 23:21:58 +03:00

Fix bogus affix-merging code.

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
This commit is contained in:
Tom Lane
2018-04-12 18:39:52 -04:00
parent 66d4b6bb80
commit ac8ea0f27f

View File

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