代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/opencc 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Index: OpenCC-ver.1.0.5/src/BinaryDict.cpp
===================================================================
--- OpenCC-ver.1.0.5.orig/src/BinaryDict.cpp
+++ OpenCC-ver.1.0.5/src/BinaryDict.cpp
@@ -63,6 +63,12 @@ void BinaryDict::SerializeToFile(FILE* f
}
BinaryDictPtr BinaryDict::NewFromFile(FILE* fp) {
+ size_t offsetBound, savedOffset;
+ savedOffset = ftell(fp);
+ fseek(fp, 0L, SEEK_END);
+ offsetBound = ftell(fp) - savedOffset;
+ fseek(fp, savedOffset, SEEK_SET);
+
BinaryDictPtr dict(new BinaryDict(LexiconPtr(new Lexicon)));
// Number of items
@@ -109,7 +115,7 @@ BinaryDictPtr BinaryDict::NewFromFile(FI
// Key offset
size_t keyOffset;
unitsRead = fread(&keyOffset, sizeof(size_t), 1, fp);
- if (unitsRead != 1) {
+ if (unitsRead != 1 || keyOffset >= offsetBound) {
throw InvalidFormat("Invalid OpenCC binary dictionary (keyOffset)");
}
const char* key = dict->keyBuffer.c_str() + keyOffset;
@@ -118,7 +124,7 @@ BinaryDictPtr BinaryDict::NewFromFile(FI
for (size_t j = 0; j < numValues; j++) {
size_t valueOffset;
unitsRead = fread(&valueOffset, sizeof(size_t), 1, fp);
- if (unitsRead != 1) {
+ if (unitsRead != 1 || valueOffset >= offsetBound) {
throw InvalidFormat("Invalid OpenCC binary dictionary (valueOffset)");
}
const char* value = dict->valueBuffer.c_str() + valueOffset;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。