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

tballison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/main by this push:
     new 0f04d49607 substitute the input path per argument in GDALParser (#3412)
0f04d49607 is described below

commit 0f04d496073e243b0f36aa1277f21470280fa284
Author: Naveed <[email protected]>
AuthorDate: Mon Oct 26 17:55:56 2026 +0530

    substitute the input path per argument in GDALParser (#3412)
    
    GDALParser substituted the input path into the command string and then
    split the result on whitespace, so a path containing spaces became
    several gdalinfo arguments. Split the command template first and
    substitute the path into each argument, as ExternalParser does.
    
    Generated-by: Claude Code (Claude Opus 5.5)
---
 .../src/main/java/org/apache/tika/parser/gdal/GDALParser.java | 11 ++++++++++-
 .../test/java/org/apache/tika/parser/gdal/TestGDALParser.java |  8 ++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git 
a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/gdal/GDALParser.java
 
b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/gdal/GDALParser.java
index 285e4670da..fb81e7328d 100644
--- 
a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/gdal/GDALParser.java
+++ 
b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/gdal/GDALParser.java
@@ -192,6 +192,15 @@ public class GDALParser implements Parser {
         return pCommand;
     }
 
+    // Split before substituting so whitespace in the input path stays inside 
one argument.
+    static String[] buildCommandLine(String command, String inputPath) {
+        String[] args = command.split("\\s+", -1);
+        for (int i = 0; i < args.length; i++) {
+            args[i] = args[i].replace(INPUT_FILE_TOKEN, inputPath);
+        }
+        return args;
+    }
+
     @Override
     public Set<MediaType> getSupportedTypes(ParseContext context) {
         return SUPPORTED_TYPES;
@@ -209,7 +218,7 @@ public class GDALParser implements Parser {
         // process the command
         TemporaryResources tmp = null;
 
-        String[] runCommand = processCommand(tis).split("\\s+", -1);
+        String[] runCommand = buildCommandLine(this.command, 
tis.getFile().getPath());
 
         FileProcessResult result = ProcessUtils.execute(new 
ProcessBuilder(runCommand), context,
                 timeoutMillis, maxStdOut, maxStdErr);
diff --git 
a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/test/java/org/apache/tika/parser/gdal/TestGDALParser.java
 
b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/test/java/org/apache/tika/parser/gdal/TestGDALParser.java
index 680e1d195d..d6e87ac387 100644
--- 
a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/test/java/org/apache/tika/parser/gdal/TestGDALParser.java
+++ 
b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/test/java/org/apache/tika/parser/gdal/TestGDALParser.java
@@ -16,6 +16,7 @@
  */
 package org.apache.tika.parser.gdal;
 
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -154,4 +155,11 @@ public class TestGDALParser extends TikaTest {
             fail(e.getMessage());
         }
     }
+
+    @Test
+    public void testInputPathWithWhitespaceIsOneArgument() {
+        String path = "/data/survey 2024/tile.tif --config GDAL_HTTP_PROXY 
attacker:8080";
+        assertArrayEquals(new String[]{"gdalinfo", path},
+                GDALParser.buildCommandLine(new GDALParser().getCommand(), 
path));
+    }
 }

Reply via email to