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

bchapuis pushed a commit to branch 790-file-exists
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git

commit 95dba61a756381e563907ff5e98a38c0b00045f5
Author: Bertil Chapuis <[email protected]>
AuthorDate: Sat Nov 4 00:46:00 2023 +0100

    Fix unzip task and add shaded relief workflow
    
    The unzip task implemented some checks against malicious
    zip files that failed with the shaded relief archive.
    They have now been removed.
---
 ...reate.run.xml => naturalearth-workflow.run.xml} |  7 ++++-
 .../apache/baremaps/workflow/tasks/UnzipFile.java  | 36 +++-------------------
 examples/shadedrelief/workflow.json                | 20 ++++++++++++
 3 files changed, 31 insertions(+), 32 deletions(-)

diff --git a/.run/naturalearth-create.run.xml 
b/.run/naturalearth-workflow.run.xml
similarity index 54%
rename from .run/naturalearth-create.run.xml
rename to .run/naturalearth-workflow.run.xml
index fb309124..45f5277d 100644
--- a/.run/naturalearth-create.run.xml
+++ b/.run/naturalearth-workflow.run.xml
@@ -1,9 +1,14 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="naturalearth-create" type="Application" 
factoryName="Application">
+  <configuration default="false" name="naturalearth-workflow" 
type="Application" factoryName="Application">
     <option name="MAIN_CLASS_NAME" value="org.apache.baremaps.cli.Baremaps" />
     <module name="baremaps-cli" />
     <option name="PROGRAM_PARAMETERS" value="workflow execute --file 
workflow.json" />
     <option name="WORKING_DIRECTORY" 
value="$PROJECT_DIR$/examples/naturalearth" />
+    <extension 
name="software.aws.toolkits.jetbrains.core.execution.JavaAwsConnectionExtension">
+      <option name="credential" />
+      <option name="region" />
+      <option name="useCurrentConnection" value="false" />
+    </extension>
     <method v="2">
       <option name="Make" enabled="true" />
     </method>
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UnzipFile.java 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UnzipFile.java
index 5a1181d9..dc89d9c5 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UnzipFile.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UnzipFile.java
@@ -22,18 +22,9 @@ import java.nio.file.*;
 import java.util.zip.ZipFile;
 import org.apache.baremaps.workflow.Task;
 import org.apache.baremaps.workflow.WorkflowContext;
-import org.apache.baremaps.workflow.WorkflowException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public record UnzipFile(Path file, Path directory) implements Task {
 
-  private static final long THRESHOLD_ENTRIES = 10000;
-  private static final long THRESHOLD_SIZE = 10l << 30;
-  private static final double THRESHOLD_RATIO = 100;
-
-  private static final Logger logger = 
LoggerFactory.getLogger(UnzipFile.class);
-
   @Override
   public void execute(WorkflowContext context) throws Exception {
     var filePath = file.toAbsolutePath();
@@ -41,11 +32,13 @@ public record UnzipFile(Path file, Path directory) 
implements Task {
 
     try (var zipFile = new ZipFile(filePath.toFile())) {
       var entries = zipFile.entries();
-      long totalSizeArchive = 0;
-      long totalEntryArchive = 0;
 
       while (entries.hasMoreElements()) {
         var ze = entries.nextElement();
+        if (ze.isDirectory()) {
+          continue;
+        }
+
         var path = directoryPath.resolve(ze.getName());
 
         var file = path.toFile().getCanonicalFile();
@@ -61,29 +54,10 @@ public record UnzipFile(Path file, Path directory) 
implements Task {
         try (var input = new BufferedInputStream(zipFile.getInputStream(ze));
             var output = new BufferedOutputStream(new 
FileOutputStream(path.toFile()))) {
 
-          totalEntryArchive++;
-
-          int nBytes = -1;
+          int nBytes;
           byte[] buffer = new byte[4096];
-          long totalSizeEntry = 0;
-
           while ((nBytes = input.read(buffer)) > 0) {
             output.write(buffer, 0, nBytes);
-            totalSizeEntry += nBytes;
-            totalSizeArchive += nBytes;
-
-            double compressionRatio = (double) totalSizeEntry / (double) 
ze.getCompressedSize();
-            if (compressionRatio > THRESHOLD_RATIO) {
-              throw new WorkflowException("Archive compression ratio is too 
high");
-            }
-          }
-
-          if (totalSizeArchive > THRESHOLD_SIZE) {
-            throw new IOException("Archive is too large");
-          }
-
-          if (totalEntryArchive > THRESHOLD_ENTRIES) {
-            throw new IOException("Archive contains too many entries");
           }
         }
       }
diff --git a/examples/shadedrelief/workflow.json 
b/examples/shadedrelief/workflow.json
new file mode 100644
index 00000000..48407d52
--- /dev/null
+++ b/examples/shadedrelief/workflow.json
@@ -0,0 +1,20 @@
+{
+  "steps": [
+    {
+      "id": "natural-earth",
+      "needs": [],
+      "tasks": [
+        {
+          "type": "DownloadUrl",
+          "url": 
"http://www.shadedrelief.com/ne-draft/World-Base-Map-Shapefiles.zip";,
+          "path": "shadedrelief.zip"
+        },
+        {
+          "type": "UnzipFile",
+          "file": "shadedrelief.zip",
+          "directory": "shadedrelief"
+        }
+      ]
+    }
+  ]
+}

Reply via email to