diff options
author | Sven Gothel <[email protected]> | 2023-11-28 03:56:33 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2023-11-28 03:56:33 +0100 |
commit | c8cb87e17a14281a9d0e2f311b8534ecb7ac00b4 (patch) | |
tree | dcbce53804b54a224061e24a3217e600f04fc493 /src | |
parent | c7efca6d9b0db7305f5352ebf15d915ae5a1fa24 (diff) |
Bug 1474: Allow temp folder for exe-file test to contain parenthesis on Windows
If the temp path contains parenthesis on Windows, e.g. the username or the sub-temp folder,
the used exeTestFile.getCanonicalPath() can't be used by 'Runtime.getRuntime().exec( path )'.
Example: C:\Users\(ABC)abc\AppData\Local\Temp
Output: Exe-Tst: 'C:\Users\' is not recognized as an internal or external command, operable program or batch file.
Hence the complete canonical path must be quoted, i.e.
Path: "C:\Users\(ABC)abc\AppData\Local\Temp"
Diffstat (limited to 'src')
-rw-r--r-- | src/java/com/jogamp/common/util/IOUtil.java | 8 | ||||
-rw-r--r-- | src/junit/com/jogamp/common/net/TestUri99LaunchOnReservedCharPathBug908.java | 5 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/java/com/jogamp/common/util/IOUtil.java b/src/java/com/jogamp/common/util/IOUtil.java index e68c3b3..e9bf050 100644 --- a/src/java/com/jogamp/common/util/IOUtil.java +++ b/src/java/com/jogamp/common/util/IOUtil.java @@ -1033,6 +1033,7 @@ public class IOUtil { final long t0 = debug ? System.currentTimeMillis() : 0; final File exeTestFile; + String exeNativePath; final boolean existingExe; try { final File permExeTestFile = DEBUG_EXE_EXISTING_FILE ? new File(dir, "jogamp_exe_tst"+getExeTestFileSuffix()) : null; @@ -1044,6 +1045,7 @@ public class IOUtil { existingExe = false; fillExeTestFile(exeTestFile); } + exeNativePath = "\""+exeTestFile.getCanonicalPath()+"\""; } catch (final SecurityException se) { throw se; // fwd Security exception } catch (final IOException e) { @@ -1072,7 +1074,7 @@ public class IOUtil { // Using 'Process.exec(String[])' avoids StringTokenizer of 'Process.exec(String)' // and hence splitting up command by spaces! // Note: All no-exec cases throw an IOExceptions at ProcessBuilder.start(), i.e. below exec() call! - pr = Runtime.getRuntime().exec( getExeTestCommandArgs( exeTestFile.getCanonicalPath() ), null, null ); + pr = Runtime.getRuntime().exec( getExeTestCommandArgs( exeNativePath ), null, null ); if( DEBUG_EXE && !DEBUG_EXE_NOSTREAM ) { new StreamMonitor(new InputStream[] { pr.getInputStream(), pr.getErrorStream() }, System.err, "Exe-Tst: "); } @@ -1089,7 +1091,7 @@ public class IOUtil { t2 = debug ? System.currentTimeMillis() : 0; res = -3; if( debug ) { - System.err.println("IOUtil.testDirExec: <"+exeTestFile.getAbsolutePath()+">: Caught "+t.getClass().getSimpleName()+": "+t.getMessage()); + System.err.println("IOUtil.testDirExec: <"+exeNativePath+">: Caught "+t.getClass().getSimpleName()+": "+t.getMessage()); t.printStackTrace(); } } finally { @@ -1115,7 +1117,7 @@ public class IOUtil { } if( debug ) { final long t3 = System.currentTimeMillis(); - System.err.println("IOUtil.testDirExec(): test-exe <"+exeTestFile.getAbsolutePath()+">, existingFile "+existingExe+", isNioExec "+isNioExec+", returned "+exitValue); + System.err.println("IOUtil.testDirExec(): test-exe <"+exeNativePath+">, existingFile "+existingExe+", isNioExec "+isNioExec+", returned "+exitValue); System.err.println("IOUtil.testDirExec(): abs-path <"+dir.getAbsolutePath()+">: res "+res+" -> "+ok); System.err.println("IOUtil.testDirExec(): total "+(t3-t0)+"ms, create "+(t1-t0)+"ms, fill "+(t2-t1)+"ms, execute "+(t3-t2)+"ms"); } diff --git a/src/junit/com/jogamp/common/net/TestUri99LaunchOnReservedCharPathBug908.java b/src/junit/com/jogamp/common/net/TestUri99LaunchOnReservedCharPathBug908.java index 3b3cc6f..f3e9970 100644 --- a/src/junit/com/jogamp/common/net/TestUri99LaunchOnReservedCharPathBug908.java +++ b/src/junit/com/jogamp/common/net/TestUri99LaunchOnReservedCharPathBug908.java @@ -110,6 +110,11 @@ public class TestUri99LaunchOnReservedCharPathBug908 extends SingletonJunitCase */ } + @Test + public void test02TempJarCacheOddPath() throws IOException, IllegalArgumentException, URISyntaxException { + // Bug 1474, issues w/ windows file path char: ( ) + testTempJarCacheOddJarPathImpl("Users/(ABC)abc/AppData/Local/Temp/"); + } private void testTempJarCacheOddJarPathImpl(final String subPathUTF) throws IOException, IllegalArgumentException, URISyntaxException { if(AndroidVersion.isAvailable) { System.err.println("n/a on Android"); return; } |