Merge "Fix: crash when opening a broken dictionary."
commit
4377ae31cf
|
@ -76,7 +76,7 @@ namespace latinime {
|
||||||
}
|
}
|
||||||
const Ver4DictBuffers::Ver4DictBuffersPtr dictBuffers =
|
const Ver4DictBuffers::Ver4DictBuffersPtr dictBuffers =
|
||||||
Ver4DictBuffers::openVer4DictBuffers(dictPath, mmappedBuffer);
|
Ver4DictBuffers::openVer4DictBuffers(dictPath, mmappedBuffer);
|
||||||
if (!dictBuffers.get()->isValid()) {
|
if (!dictBuffers.get() || !dictBuffers.get()->isValid()) {
|
||||||
AKLOGE("DICT: The dictionary doesn't satisfy ver4 format requirements. path: %s",
|
AKLOGE("DICT: The dictionary doesn't satisfy ver4 format requirements. path: %s",
|
||||||
path);
|
path);
|
||||||
ASSERT(false);
|
ASSERT(false);
|
||||||
|
|
|
@ -28,9 +28,14 @@ namespace latinime {
|
||||||
|
|
||||||
/* static */ Ver4DictBuffers::Ver4DictBuffersPtr Ver4DictBuffers::openVer4DictBuffers(
|
/* static */ Ver4DictBuffers::Ver4DictBuffersPtr Ver4DictBuffers::openVer4DictBuffers(
|
||||||
const char *const dictPath, const MmappedBuffer::MmappedBufferPtr &headerBuffer) {
|
const char *const dictPath, const MmappedBuffer::MmappedBufferPtr &headerBuffer) {
|
||||||
const bool isUpdatable = headerBuffer.get() ? headerBuffer.get()->isUpdatable() : false;
|
if (!headerBuffer.get()) {
|
||||||
|
ASSERT(false);
|
||||||
|
AKLOGE("The header buffer must be valid to open ver4 dict buffers.");
|
||||||
|
return Ver4DictBuffersPtr(0);
|
||||||
|
}
|
||||||
// TODO: take only dictDirPath, and open both header and trie files in the constructor below
|
// TODO: take only dictDirPath, and open both header and trie files in the constructor below
|
||||||
return Ver4DictBuffersPtr(new Ver4DictBuffers(dictPath, headerBuffer, isUpdatable));
|
return Ver4DictBuffersPtr(new Ver4DictBuffers(
|
||||||
|
dictPath, headerBuffer, headerBuffer.get()->isUpdatable()));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Ver4DictBuffers::flushHeaderAndDictBuffers(const char *const dictDirPath,
|
bool Ver4DictBuffers::flushHeaderAndDictBuffers(const char *const dictDirPath,
|
||||||
|
@ -113,10 +118,11 @@ Ver4DictBuffers::Ver4DictBuffers(const char *const dictPath,
|
||||||
mDictBuffer(MmappedBuffer::openBuffer(dictPath,
|
mDictBuffer(MmappedBuffer::openBuffer(dictPath,
|
||||||
Ver4DictConstants::TRIE_FILE_EXTENSION, isUpdatable)),
|
Ver4DictConstants::TRIE_FILE_EXTENSION, isUpdatable)),
|
||||||
mHeaderPolicy(headerBuffer.get()->getBuffer(), FormatUtils::VERSION_4),
|
mHeaderPolicy(headerBuffer.get()->getBuffer(), FormatUtils::VERSION_4),
|
||||||
mExpandableHeaderBuffer(headerBuffer.get()->getBuffer(), mHeaderPolicy.getSize(),
|
mExpandableHeaderBuffer(headerBuffer.get() ? headerBuffer.get()->getBuffer() : 0,
|
||||||
|
mHeaderPolicy.getSize(),
|
||||||
BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE),
|
BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE),
|
||||||
mExpandableTrieBuffer(mDictBuffer.get()->getBuffer(),
|
mExpandableTrieBuffer(mDictBuffer.get() ? mDictBuffer.get()->getBuffer() : 0,
|
||||||
mDictBuffer.get()->getBufferSize(),
|
mDictBuffer.get() ? mDictBuffer.get()->getBufferSize() : 0,
|
||||||
BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE),
|
BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE),
|
||||||
mTerminalPositionLookupTable(dictPath, isUpdatable),
|
mTerminalPositionLookupTable(dictPath, isUpdatable),
|
||||||
mProbabilityDictContent(dictPath, mHeaderPolicy.hasHistoricalInfoOfWords(),
|
mProbabilityDictContent(dictPath, mHeaderPolicy.hasHistoricalInfoOfWords(),
|
||||||
|
|
|
@ -42,7 +42,7 @@ class Ver4DictBuffers {
|
||||||
}
|
}
|
||||||
|
|
||||||
AK_FORCE_INLINE bool isValid() const {
|
AK_FORCE_INLINE bool isValid() const {
|
||||||
return mDictBuffer.get() != 0 && mHeaderPolicy.isValid()
|
return mHeaderBuffer.get() && mDictBuffer.get() && mHeaderPolicy.isValid()
|
||||||
&& mProbabilityDictContent.isValid() && mTerminalPositionLookupTable.isValid()
|
&& mProbabilityDictContent.isValid() && mTerminalPositionLookupTable.isValid()
|
||||||
&& mBigramDictContent.isValid() && mShortcutDictContent.isValid();
|
&& mBigramDictContent.isValid() && mShortcutDictContent.isValid();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue