From 8d70d901d992d1b96e69cda401d9880d442816c6 Mon Sep 17 00:00:00 2001 From: Peng Wu Date: Fri, 18 Mar 2016 11:16:35 +0800 Subject: fixes crashes --- src/storage/chewing_large_table2.cpp | 2 ++ src/storage/chewing_large_table2.h | 6 +++++- src/storage/chewing_large_table2_bdb.cpp | 1 + src/storage/chewing_large_table2_kyotodb.cpp | 3 ++- 4 files changed, 10 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/storage/chewing_large_table2.cpp b/src/storage/chewing_large_table2.cpp index 9e9fd4a..da93cf0 100644 --- a/src/storage/chewing_large_table2.cpp +++ b/src/storage/chewing_large_table2.cpp @@ -35,6 +35,7 @@ void ChewingLargeTable2::init_entries() { ChewingTableEntry * entry = \ new ChewingTableEntry; \ g_ptr_array_index(m_entries, len) = entry; \ + break; \ } for (size_t i = 1; i < m_entries->len; i++) { @@ -76,6 +77,7 @@ void ChewingLargeTable2::fini_entries() { (ChewingTableEntry *) \ g_ptr_array_index(m_entries, len); \ delete entry; \ + break; \ } switch(i) { diff --git a/src/storage/chewing_large_table2.h b/src/storage/chewing_large_table2.h index 0aaddd1..52c5983 100644 --- a/src/storage/chewing_large_table2.h +++ b/src/storage/chewing_large_table2.h @@ -106,7 +106,11 @@ public: int search(/* in */ const ChewingKey keys[], /* out */ PhraseIndexRanges ranges) const { IndexItem item; - compute_chewing_index(keys, item.m_keys, phrase_length); + if (contains_incomplete_pinyin(keys, phrase_length)) { + compute_incomplete_chewing_index(keys, item.m_keys, phrase_length); + } else { + compute_chewing_index(keys, item.m_keys, phrase_length); + } const IndexItem * begin = (IndexItem *) m_chunk.begin(); const IndexItem * end = (IndexItem *) m_chunk.end(); diff --git a/src/storage/chewing_large_table2_bdb.cpp b/src/storage/chewing_large_table2_bdb.cpp index c626966..db63731 100644 --- a/src/storage/chewing_large_table2_bdb.cpp +++ b/src/storage/chewing_large_table2_bdb.cpp @@ -437,6 +437,7 @@ bool ChewingLargeTable2::mask_out(phrase_token_t mask, db_data.size = entry->m_chunk.size(); \ int ret = tmp_db->put(tmp_db, NULL, &db_key, &db_data, 0); \ assert(ret == 0); \ + break; \ } switch(phrase_length) { diff --git a/src/storage/chewing_large_table2_kyotodb.cpp b/src/storage/chewing_large_table2_kyotodb.cpp index 9204b6e..469bb54 100644 --- a/src/storage/chewing_large_table2_kyotodb.cpp +++ b/src/storage/chewing_large_table2_kyotodb.cpp @@ -33,6 +33,7 @@ ChewingLargeTable2::ChewingLargeTable2() { m_db = new ProtoTreeDB; assert(m_db->open("-", BasicDB::OREADER|BasicDB::OWRITER|BasicDB::OCREATE)); + m_entries = NULL; init_entries(); } @@ -225,7 +226,7 @@ int ChewingLargeTable2::add_index_internal(/* in */ const ChewingKey index[], entry->m_chunk.set_size(vsiz); /* m_chunk may re-allocate here. */ vbuf = (char *) entry->m_chunk.begin(); - assert(vsiz = m_db->get(kbuf, ksiz, vbuf, vsiz)); + assert(vsiz == m_db->get(kbuf, ksiz, vbuf, vsiz)); int result = entry->add_index(keys, token); -- cgit