1 Star 0 Fork 81

lyn/openjdk-1.8.0

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
print-fd-and-file-path-when-a-zip-invalid-loc-header.patch 2.18 KB
一键复制 编辑 原始数据 按行查看 历史
diff --git a/jdk/src/share/native/java/util/zip/zip_util.c b/jdk/src/share/native/java/util/zip/zip_util.c
index 3dbd2ba62..ff59c5ecc 100644
--- a/jdk/src/share/native/java/util/zip/zip_util.c
+++ b/jdk/src/share/native/java/util/zip/zip_util.c
@@ -81,6 +81,20 @@ static jint INITIAL_META_COUNT = 2; /* initial number of entries in meta name
#ifdef LINUX
#define ZIP_INVALID_LOC_HEADER_EXIT "ZIP_INVALID_LOC_HEADER_EXIT"
+void printFdInfo(jzfile *zip) {
+ int fd = zip->zfd;
+ char fdPath[100];
+ char filePath[PATH_MAX + 1];
+ sprintf(fdPath, "/proc/self/fd/%d", fd);
+ int len = readlink(fdPath, filePath, PATH_MAX);
+ if (len < 0) {
+ printf("[LOC-ERROR] Could not find fd : %d\n", fd);
+ return;
+ }
+ filePath[len] = '\0';
+ printf("[LOC-ERROR] LOC check failed, zfd : %d , zfd file : %s\n", zip->zfd, filePath);
+}
+
char *getExitFlag() {
static char *process_exit_flag = NULL;
static jboolean is_initialized = JNI_FALSE;
@@ -1339,8 +1353,8 @@ ZIP_GetEntryDataOffset(jzfile *zip, jzentry *entry)
if (GETSIG(loc) != LOCSIG) {
zip->msg = "invalid LOC header (bad signature)";
printf("[LOC-ERROR] LOC check failed, %s\n", zip->msg);
- printf("[LOC-ERROR] LOC check failed for jar: %s, class: %s, LOC: %08lx, pos:%ld\n",
- zip->name, entry->name, GETSIG(loc), (-(entry->pos)));
+ printf("[LOC-ERROR] LOC check failed for jar: %s, class: %s, LOCSIG: %08lx, expected LOCSIG: %08lx, "
+ "pos:%ld\n", zip->name, entry->name, GETSIG(loc), LOCSIG, (-(entry->pos)));
unsigned int *temp = (unsigned int *) loc;
printf("[LOC-ERROR] LOC check failed, readVal: %08x %08x %08x %08x %08x %08x %08x %02x %02x\n",
*temp, *(temp + 1), *(temp + 2), *(temp + 3), *(temp + 4),
@@ -1349,6 +1363,9 @@ ZIP_GetEntryDataOffset(jzfile *zip, jzentry *entry)
#ifdef LINUX
#define ZIP_INVALID_LOC_HEADER_EXIT_ONLY "1"
#define ZIP_INVALID_LOC_HEADER_EXIT_CODE_DUMP "2"
+ // print fd info
+ printFdInfo(zip);
+
/*
* The meaning of the exit flag is as follows:
* 1: exit (126)
--
2.12.3
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/lyn1001/openjdk-1.8.0.git
git@gitee.com:lyn1001/openjdk-1.8.0.git
lyn1001
openjdk-1.8.0
openjdk-1.8.0
master

搜索帮助