This is an automated email from the ASF dual-hosted git repository.

pengzheng pushed a commit to branch hotfix/643-zip-extraction-error
in repository https://gitbox.apache.org/repos/asf/celix.git


The following commit(s) were added to 
refs/heads/hotfix/643-zip-extraction-error by this push:
     new b6605787 [#643] Create destination directory before performing 
decompression.
b6605787 is described below

commit b6605787436695a7a43c91ed774449857f39cf03
Author: PengZheng <[email protected]>
AuthorDate: Fri Sep 22 17:19:13 2023 +0800

    [#643] Create destination directory before performing decompression.
    
    Bundle produces by zip does not necessarily begin with META-INF.
---
 libs/utils/gtest/src/FileUtilsTestSuite.cc | 9 ++++++++-
 libs/utils/src/celix_file_utils.c          | 5 +++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/libs/utils/gtest/src/FileUtilsTestSuite.cc 
b/libs/utils/gtest/src/FileUtilsTestSuite.cc
index 0b4755a9..6ff80d79 100644
--- a/libs/utils/gtest/src/FileUtilsTestSuite.cc
+++ b/libs/utils/gtest/src/FileUtilsTestSuite.cc
@@ -189,9 +189,16 @@ TEST_F(FileUtilsTestSuite, ExtractZipFileTest) {
     EXPECT_EQ(celix_properties_getAsLong(props, "level", 0), 2);
     celix_properties_destroy(props);
 
+    //Given a test zip file, extract to file is a error
+    const char* error = nullptr;
+    status = celix_utils_extractZipFile(TEST_ZIP_LOCATION, file1, &error);
+    EXPECT_NE(status, CELIX_SUCCESS);
+    EXPECT_NE(error, nullptr);
+
+
     //Given a incorrect path extractZipFile returns a error
     const char* invalidPath = "does-not-exists.zip";
-    const char* error = nullptr;
+    error = nullptr;
     EXPECT_FALSE(celix_utils_fileExists(invalidPath));
     status = celix_utils_extractZipFile(invalidPath, extractLocation, &error);
     EXPECT_NE(status, CELIX_SUCCESS);
diff --git a/libs/utils/src/celix_file_utils.c 
b/libs/utils/src/celix_file_utils.c
index dcfd6b70..692be8d6 100644
--- a/libs/utils/src/celix_file_utils.c
+++ b/libs/utils/src/celix_file_utils.c
@@ -214,6 +214,11 @@ static celix_status_t celix_utils_extractZipInternal(zip_t 
*zip, const char* ext
     char buf[5120];
     size_t bufSize = 5112;
 
+    status = celix_utils_createDirectory(extractToDir, false, errorOut);
+    if (status != CELIX_SUCCESS) {
+        return status;
+    }
+
     for (zip_int64_t i = 0; status == CELIX_SUCCESS && i < nrOfEntries; ++i) {
         zip_stat_t st;
         if(zip_stat_index(zip, i, 0, &st) == -1) {

Reply via email to