diff --git a/hapsigntool_cpp/codesigning/sign/include/code_signing.h b/hapsigntool_cpp/codesigning/sign/include/code_signing.h index 7bf8f771f5e139516c026c4fb1a0351e56ecbfa2..a9aece49b7ddbb24211d6e12318f2d26b9177125 100644 --- a/hapsigntool_cpp/codesigning/sign/include/code_signing.h +++ b/hapsigntool_cpp/codesigning/sign/include/code_signing.h @@ -66,7 +66,7 @@ public: bool GetSingleFileStreamFromZip(unzFile& zFile, char fileName[], unz_file_info& zFileInfo, int& readFileSize, std::stringbuf& sb); - bool RunParseZipInfo(const std::string& packageName, UnzipHandleParam& param, uLong index); + bool RunParseZipInfo(const std::string& packageName, UnzipHandleParam& param, unz_file_pos pos); bool GenerateSignature(const std::vector& signedData, const std::string&, std::vector&); int64_t m_timestamp = 0; diff --git a/hapsigntool_cpp/codesigning/sign/src/code_signing.cpp b/hapsigntool_cpp/codesigning/sign/src/code_signing.cpp index fb9afde87dd3194e88f7a4ab1b2a1e82e9383dfa..f3ca4ff7bb25536bc5a8c7772dce10d45a1c6622 100644 --- a/hapsigntool_cpp/codesigning/sign/src/code_signing.cpp +++ b/hapsigntool_cpp/codesigning/sign/src/code_signing.cpp @@ -313,20 +313,17 @@ bool CodeSigning::GetSingleFileStreamFromZip(unzFile &zFile, char fileName[], return true; } -bool CodeSigning::RunParseZipInfo(const std::string& packageName, UnzipHandleParam& param, uLong index) +bool CodeSigning::RunParseZipInfo(const std::string& packageName, UnzipHandleParam& param, unz_file_pos pos) { unzFile zFile = unzOpen(packageName.c_str()); if (zFile == NULL) { PrintErrorNumberMsg("IO_ERROR", IO_ERROR, "zlib open file: " + packageName + " failed."); return false; } - for (uLong i = 0; i < index; ++i) { - int ret = unzGoToNextFile(zFile); - if (ret != UNZ_OK) { - PrintErrorNumberMsg("SIGN_ERROR", SIGN_ERROR, "zlib go to next file failed."); - unzClose(zFile); - return false; - } + if (unzGoToFilePos(zFile, &pos) != UNZ_OK) { + PrintErrorNumberMsg("SIGN_ERROR", SIGN_ERROR, "zlib go to file failed."); + unzClose(zFile); + return false; } unz_file_info zFileInfo; char fileName[FILE_NAME_SIZE]; @@ -377,8 +374,13 @@ bool CodeSigning::HandleZipGlobalInfo(const std::string& packageName, unzFile& z return false; } if (CheckFileName(fileName, &nameLen)) { + unz_file_pos pos; + if (unzGetFilePos(zFile, &pos) != UNZ_OK) { + SIGNATURE_TOOLS_LOGE("unzGetFilePos failed, fileName = %s", fileName); + return false; + } thread_results.push_back(mPools->Enqueue(&CodeSigning::RunParseZipInfo, this, - std::ref(packageName), std::ref(param), i)); + std::ref(packageName), std::ref(param), pos)); } if (i != zGlobalInfo.number_entry - 1) { int ret = unzGoToNextFile(zFile);