mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Validate ispell dictionaries more carefully.
Using incorrect, or just mismatched, dictionary and affix files could result in a crash, due to failure to cross-check offsets obtained from the file. Add necessary validation, as well as some Asserts for future-proofing. Per bug #16050 from Alexander Lakhin. Back-patch to 9.6 where the problem was introduced. Arthur Zakirov, per initial investigation by Tomas Vondra Discussion: https://postgr.es/m/16050-024ae722464ab604@postgresql.org Discussion: https://postgr.es/m/20191013012610.2p2fp3zzpoav7jzf@development
This commit is contained in:
@ -413,6 +413,40 @@ SELECT ts_lexize('hunspell_num', 'footballyklubber');
|
||||
{foot,ball,klubber}
|
||||
(1 row)
|
||||
|
||||
-- Test suitability of affix and dict files
|
||||
CREATE TEXT SEARCH DICTIONARY hunspell_err (
|
||||
Template=ispell,
|
||||
DictFile=ispell_sample,
|
||||
AffFile=hunspell_sample_long
|
||||
);
|
||||
ERROR: invalid affix alias "GJUS"
|
||||
CREATE TEXT SEARCH DICTIONARY hunspell_err (
|
||||
Template=ispell,
|
||||
DictFile=ispell_sample,
|
||||
AffFile=hunspell_sample_num
|
||||
);
|
||||
ERROR: invalid affix flag "SZ\"
|
||||
CREATE TEXT SEARCH DICTIONARY hunspell_invalid_1 (
|
||||
Template=ispell,
|
||||
DictFile=hunspell_sample_long,
|
||||
AffFile=ispell_sample
|
||||
);
|
||||
CREATE TEXT SEARCH DICTIONARY hunspell_invalid_2 (
|
||||
Template=ispell,
|
||||
DictFile=hunspell_sample_long,
|
||||
AffFile=hunspell_sample_num
|
||||
);
|
||||
CREATE TEXT SEARCH DICTIONARY hunspell_invalid_3 (
|
||||
Template=ispell,
|
||||
DictFile=hunspell_sample_num,
|
||||
AffFile=ispell_sample
|
||||
);
|
||||
CREATE TEXT SEARCH DICTIONARY hunspell_err (
|
||||
Template=ispell,
|
||||
DictFile=hunspell_sample_num,
|
||||
AffFile=hunspell_sample_long
|
||||
);
|
||||
ERROR: invalid affix alias "302,301,202,303"
|
||||
-- Synonym dictionary
|
||||
CREATE TEXT SEARCH DICTIONARY synonym (
|
||||
Template=synonym,
|
||||
|
@ -101,6 +101,43 @@ SELECT ts_lexize('hunspell_num', 'footballklubber');
|
||||
SELECT ts_lexize('hunspell_num', 'ballyklubber');
|
||||
SELECT ts_lexize('hunspell_num', 'footballyklubber');
|
||||
|
||||
-- Test suitability of affix and dict files
|
||||
CREATE TEXT SEARCH DICTIONARY hunspell_err (
|
||||
Template=ispell,
|
||||
DictFile=ispell_sample,
|
||||
AffFile=hunspell_sample_long
|
||||
);
|
||||
|
||||
CREATE TEXT SEARCH DICTIONARY hunspell_err (
|
||||
Template=ispell,
|
||||
DictFile=ispell_sample,
|
||||
AffFile=hunspell_sample_num
|
||||
);
|
||||
|
||||
CREATE TEXT SEARCH DICTIONARY hunspell_invalid_1 (
|
||||
Template=ispell,
|
||||
DictFile=hunspell_sample_long,
|
||||
AffFile=ispell_sample
|
||||
);
|
||||
|
||||
CREATE TEXT SEARCH DICTIONARY hunspell_invalid_2 (
|
||||
Template=ispell,
|
||||
DictFile=hunspell_sample_long,
|
||||
AffFile=hunspell_sample_num
|
||||
);
|
||||
|
||||
CREATE TEXT SEARCH DICTIONARY hunspell_invalid_3 (
|
||||
Template=ispell,
|
||||
DictFile=hunspell_sample_num,
|
||||
AffFile=ispell_sample
|
||||
);
|
||||
|
||||
CREATE TEXT SEARCH DICTIONARY hunspell_err (
|
||||
Template=ispell,
|
||||
DictFile=hunspell_sample_num,
|
||||
AffFile=hunspell_sample_long
|
||||
);
|
||||
|
||||
-- Synonym dictionary
|
||||
CREATE TEXT SEARCH DICTIONARY synonym (
|
||||
Template=synonym,
|
||||
|
Reference in New Issue
Block a user