summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2016-03-18 11:16:35 +0800
committerPeng Wu <alexepico@gmail.com>2016-03-18 11:16:35 +0800
commit8d70d901d992d1b96e69cda401d9880d442816c6 (patch)
treeb86bb63daa49f4f612cb4f171979a0b508566764 /src
parent2ad795e5832bf730cbdd5c2aacd4c2a4e94806bd (diff)
downloadlibpinyin-8d70d901d992d1b96e69cda401d9880d442816c6.tar.gz
libpinyin-8d70d901d992d1b96e69cda401d9880d442816c6.tar.xz
libpinyin-8d70d901d992d1b96e69cda401d9880d442816c6.zip
fixes crashes
Diffstat (limited to 'src')
-rw-r--r--src/storage/chewing_large_table2.cpp2
-rw-r--r--src/storage/chewing_large_table2.h6
-rw-r--r--src/storage/chewing_large_table2_bdb.cpp1
-rw-r--r--src/storage/chewing_large_table2_kyotodb.cpp3
4 files changed, 10 insertions, 2 deletions
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<len> * entry = \
new ChewingTableEntry<len>; \
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<len> *) \
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);