From 888b291e12924e256ae45b0b88c2149e16792331 Mon Sep 17 00:00:00 2001 From: BrianDevC <116743850+BrianDevC@users.noreply.github.com> Date: Thu, 27 Oct 2022 21:11:07 +0100 Subject: [PATCH] iss-4535 Changed to be much shorter as pointed out, manual still passes tests. New test added Changelog moved. #4535 --- CHANGELOG.md | 2 +- .../client/dsl/internal/core/v1/PodOperationsImpl.java | 2 +- .../client/dsl/internal/uploadable/PodUploadTest.java | 4 ++-- .../src/test/java/io/fabric8/kubernetes/PodIT.java | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 261bdd81a59..b9e6f7ec6ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### 6.3-SNAPSHOT #### Bugs +* Fix #4535: The shell command string will now have single quotes sanitized #### Improvements @@ -15,7 +16,6 @@ ### 6.2.0 (2022-10-20) #### Bugs -* Fix #4535: The shell command string will now have single quotes sanitized * Fix #3733: The authentication command from the .kube/config won't be discarded if no arguments are specified * Fix #4312: fix timestamp can't be deserialized for IstioCondition * Fix #4369: Informers will retry with a backoff on list/watch failure as they did in 5.12 and prior. diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/core/v1/PodOperationsImpl.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/core/v1/PodOperationsImpl.java index 923fabf5770..e3ee180a970 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/core/v1/PodOperationsImpl.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/core/v1/PodOperationsImpl.java @@ -591,7 +591,7 @@ public BytesLimitTerminateTimeTailPrettyLoggable usingTimestamps() { } public static String shellQuote(String value) { - return "'" + value.replace("'", "\'\"\'\"\'") + "'"; + return "'" + value.replace("'", "'\\''") + "'"; } @Override diff --git a/kubernetes-client/src/test/java/io/fabric8/kubernetes/client/dsl/internal/uploadable/PodUploadTest.java b/kubernetes-client/src/test/java/io/fabric8/kubernetes/client/dsl/internal/uploadable/PodUploadTest.java index b76c489c953..f5a4b11a2e5 100644 --- a/kubernetes-client/src/test/java/io/fabric8/kubernetes/client/dsl/internal/uploadable/PodUploadTest.java +++ b/kubernetes-client/src/test/java/io/fabric8/kubernetes/client/dsl/internal/uploadable/PodUploadTest.java @@ -186,7 +186,7 @@ void createExecCommandForUpload_withSingleQuoteInPath() String result = PodUpload.createExecCommandForUpload("/tmp/fo'o/cp.log"); // Then - assertThat(result, equalTo("mkdir -p '/tmp/fo\'\"\'\"\'o' && base64 -d - > '/tmp/fo\'\"\'\"\'o/cp.log'")); + assertThat(result, equalTo("mkdir -p '/tmp/fo\'\\'\'o' && base64 -d - > '/tmp/fo\'\\'\'o/cp.log'")); } @Test @@ -196,7 +196,7 @@ void createExecCommandForUpload_withMultipleSingleQuotesInPath() String result = PodUpload.createExecCommandForUpload("/tmp/f'o'o/c'p.log"); // Then - assertThat(result, equalTo("mkdir -p '/tmp/f\'\"\'\"\'o\'\"\'\"\'o' && base64 -d - > '/tmp/f\'\"\'\"\'o\'\"\'\"\'o/c\'\"\'\"\'p.log'")); + assertThat(result, equalTo("mkdir -p '/tmp/f\'\\'\'o\'\\'\'o' && base64 -d - > '/tmp/f\'\\'\'o\'\\'\'o/c\'\\'\'p.log'")); } void uploadFileAndVerify(PodUploadTester fileUploadMethodToTest) throws IOException, InterruptedException { diff --git a/kubernetes-itests/src/test/java/io/fabric8/kubernetes/PodIT.java b/kubernetes-itests/src/test/java/io/fabric8/kubernetes/PodIT.java index 30f25414e60..5bc1c2db3cc 100644 --- a/kubernetes-itests/src/test/java/io/fabric8/kubernetes/PodIT.java +++ b/kubernetes-itests/src/test/java/io/fabric8/kubernetes/PodIT.java @@ -274,6 +274,7 @@ void uploadFile() throws IOException { assertUploaded("pod-standard", tmpFile, "/tmp/toBeUploaded"); assertUploaded("pod-standard", tmpFile, "/tmp/001_special_!@#\\$^&(.mp4"); + assertUploaded("pod-standard", tmpFile, "/tmp/002'special"); } private void assertUploaded(String podName, final Path tmpFile, String filename) throws IOException {