| Index: third_party/hunspell/src/hunspell/hunspell.cxx
|
| ===================================================================
|
| --- third_party/hunspell/src/hunspell/hunspell.cxx (revision 50428)
|
| +++ third_party/hunspell/src/hunspell/hunspell.cxx (working copy)
|
| @@ -7,18 +7,35 @@
|
|
|
| #include "hunspell.hxx"
|
| #include "hunspell.h"
|
| +#ifndef HUNSPELL_CHROME_CLIENT
|
| #include "config.h"
|
| +#endif
|
| #include "csutil.hxx"
|
|
|
| +#ifdef HUNSPELL_CHROME_CLIENT
|
| +Hunspell::Hunspell(const unsigned char* bdict_data, size_t bdict_length)
|
| +#else
|
| Hunspell::Hunspell(const char * affpath, const char * dpath, const char * key)
|
| +#endif
|
| {
|
| encoding = NULL;
|
| csconv = NULL;
|
| utf8 = 0;
|
| complexprefixes = 0;
|
| +#ifndef HUNSPELL_CHROME_CLIENT
|
| affixpath = mystrdup(affpath);
|
| +#endif
|
| maxdic = 0;
|
|
|
| +#ifdef HUNSPELL_CHROME_CLIENT
|
| + bdict_reader = new hunspell::BDictReader;
|
| + bdict_reader->Init(bdict_data, bdict_length);
|
| +
|
| + pHMgr[0] = new HashMgr(bdict_reader);
|
| + if (pHMgr[0]) maxdic = 1;
|
| +
|
| + pAMgr = new AffixMgr(bdict_reader, pHMgr, &maxdic);
|
| +#else
|
| /* first set up the hash manager */
|
| pHMgr[0] = new HashMgr(dpath, affpath, key);
|
| if (pHMgr[0]) maxdic = 1;
|
| @@ -26,6 +43,7 @@
|
| /* next set up the affix manager */
|
| /* it needs access to the hash manager lookup methods */
|
| pAMgr = new AffixMgr(affpath, pHMgr, &maxdic, key);
|
| +#endif
|
|
|
| /* get the preferred try string and the dictionary */
|
| /* encoding from the Affix Manager for that dictionary */
|
| @@ -56,10 +74,17 @@
|
| csconv= NULL;
|
| if (encoding) free(encoding);
|
| encoding = NULL;
|
| +
|
| +#ifdef HUNSPELL_CHROME_CLIENT
|
| + if (bdict_reader) delete bdict_reader;
|
| + bdict_reader = NULL;
|
| +#else
|
| if (affixpath) free(affixpath);
|
| affixpath = NULL;
|
| +#endif
|
| }
|
|
|
| +#ifndef HUNSPELL_CHROME_CLIENT
|
| // load extra dictionaries
|
| int Hunspell::add_dic(const char * dpath, const char * key) {
|
| if (maxdic == MAXDIC || !affixpath) return 1;
|
| @@ -67,6 +92,7 @@
|
| if (pHMgr[maxdic]) maxdic++; else return 1;
|
| return 0;
|
| }
|
| +#endif
|
|
|
| // make a copy of src at destination while removing all leading
|
| // blanks and removing any trailing periods after recording
|
| @@ -319,6 +345,9 @@
|
|
|
| int Hunspell::spell(const char * word, int * info, char ** root)
|
| {
|
| +#ifdef HUNSPELL_CHROME_CLIENT
|
| + if (pHMgr) pHMgr[0]->EmptyHentryCache();
|
| +#endif
|
| struct hentry * rv=NULL;
|
| // need larger vector. For example, Turkish capital letter I converted a
|
| // 2-byte UTF-8 character (dotless i) by mkallsmall.
|
| @@ -567,6 +596,13 @@
|
| word = w2;
|
| } else word = w;
|
|
|
| +#ifdef HUNSPELL_CHROME_CLIENT
|
| + // We need to check if the word length is valid to make coverity (Event
|
| + // fixed_size_dest: Possible overrun of N byte fixed size buffer) happy.
|
| + if ((utf8 && strlen(word) >= MAXWORDUTF8LEN) || (!utf8 && strlen(word) >= MAXWORDLEN))
|
| + return NULL;
|
| +#endif
|
| +
|
| // word reversing wrapper for complex prefixes
|
| if (complexprefixes) {
|
| if (word != w2) {
|
| @@ -657,6 +693,9 @@
|
|
|
| int Hunspell::suggest(char*** slst, const char * word)
|
| {
|
| +#ifdef HUNSPELL_CHROME_CLIENT
|
| + if (pHMgr) pHMgr[0]->EmptyHentryCache();
|
| +#endif
|
| int onlycmpdsug = 0;
|
| char cw[MAXWORDUTF8LEN];
|
| char wspace[MAXWORDUTF8LEN];
|
| @@ -1874,13 +1913,21 @@
|
|
|
| Hunhandle *Hunspell_create(const char * affpath, const char * dpath)
|
| {
|
| +#ifdef HUNSPELL_CHROME_CLIENT
|
| + return NULL;
|
| +#else
|
| return (Hunhandle*)(new Hunspell(affpath, dpath));
|
| +#endif
|
| }
|
|
|
| Hunhandle *Hunspell_create_key(const char * affpath, const char * dpath,
|
| const char * key)
|
| {
|
| +#ifdef HUNSPELL_CHROME_CLIENT
|
| + return NULL;
|
| +#else
|
| return (Hunhandle*)(new Hunspell(affpath, dpath, key));
|
| +#endif
|
| }
|
|
|
| void Hunspell_destroy(Hunhandle *pHunspell)
|
|
|