1 Star 0 Fork 13

huanghaitao/opencc

forked from src-openEuler/opencc 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
opencc-check-bounds.patch 1.37 KB
一键复制 编辑 原始数据 按行查看 历史
bingo2008 提交于 2019-12-14 14:13 . add package
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;
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/hht8/opencc.git
git@gitee.com:hht8/opencc.git
hht8
opencc
opencc
master

搜索帮助