summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2020-10-14 10:52:04 +0800
committerPeng Wu <alexepico@gmail.com>2020-10-14 10:52:04 +0800
commit78450c31880245a4f87c83b80ac0fc306a96104e (patch)
tree22e1abec780e896f50588fff2e79618d1776c1c1
parent31b73dd2c05d2b258c251251765ade141a1eb3fd (diff)
downloadlibpinyin-78450c31880245a4f87c83b80ac0fc306a96104e.tar.gz
libpinyin-78450c31880245a4f87c83b80ac0fc306a96104e.tar.xz
libpinyin-78450c31880245a4f87c83b80ac0fc306a96104e.zip
Fixes Berkeley DB cursor usage
-rw-r--r--src/storage/chewing_large_table2_bdb.cpp3
-rw-r--r--src/storage/flexible_ngram_bdb.h4
-rw-r--r--src/storage/ngram_bdb.cpp4
-rw-r--r--src/storage/phrase_large_table3_bdb.cpp4
4 files changed, 15 insertions, 0 deletions
diff --git a/src/storage/chewing_large_table2_bdb.cpp b/src/storage/chewing_large_table2_bdb.cpp
index 6741ffd..9813b57 100644
--- a/src/storage/chewing_large_table2_bdb.cpp
+++ b/src/storage/chewing_large_table2_bdb.cpp
@@ -448,6 +448,9 @@ bool ChewingLargeTable2::mask_out(phrase_token_t mask,
#undef CASE
+ /* Initialize our DBTs. */
+ memset(&db_key, 0, sizeof(DBT));
+ memset(&db_data, 0, sizeof(DBT));
}
assert(ret == DB_NOTFOUND);
diff --git a/src/storage/flexible_ngram_bdb.h b/src/storage/flexible_ngram_bdb.h
index 786cb76..e526e69 100644
--- a/src/storage/flexible_ngram_bdb.h
+++ b/src/storage/flexible_ngram_bdb.h
@@ -270,6 +270,10 @@ public:
}
phrase_token_t * token = (phrase_token_t *) key.data;
g_array_append_val(items, *token);
+
+ /* Initialize our DBTs. */
+ memset(&key, 0, sizeof(DBT));
+ memset(&data, 0, sizeof(DBT));
}
if ( ret != DB_NOTFOUND ){
diff --git a/src/storage/ngram_bdb.cpp b/src/storage/ngram_bdb.cpp
index a13b431..95afdbd 100644
--- a/src/storage/ngram_bdb.cpp
+++ b/src/storage/ngram_bdb.cpp
@@ -199,6 +199,10 @@ bool Bigram::get_all_items(GArray * items){
assert(key.size == sizeof(phrase_token_t));
phrase_token_t * token = (phrase_token_t *)key.data;
g_array_append_val(items, *token);
+
+ /* Initialize our DBTs. */
+ memset(&key, 0, sizeof(DBT));
+ memset(&data, 0, sizeof(DBT));
}
assert (ret == DB_NOTFOUND);
diff --git a/src/storage/phrase_large_table3_bdb.cpp b/src/storage/phrase_large_table3_bdb.cpp
index 03632ae..cb2847e 100644
--- a/src/storage/phrase_large_table3_bdb.cpp
+++ b/src/storage/phrase_large_table3_bdb.cpp
@@ -302,6 +302,10 @@ bool PhraseLargeTable3::mask_out(phrase_token_t mask,
db_data.size = entry.m_chunk.size();
int ret = cursorp->put(cursorp, &db_key, &db_data, DB_CURRENT);
assert(ret == 0);
+
+ /* Initialize our DBTs. */
+ memset(&db_key, 0, sizeof(DBT));
+ memset(&db_data, 0, sizeof(DBT));
}
assert(ret == DB_NOTFOUND);