From e01f74e763c16c0ad3da52f7f5649014f6f58361 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Tue, 27 Apr 2021 21:30:12 +0200 Subject: [PATCH 1/2] Introduce test case that demonstrates #59 (the & problem) --- script/test-smoke.sh | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/script/test-smoke.sh b/script/test-smoke.sh index a2ffcea1..16ab3807 100755 --- a/script/test-smoke.sh +++ b/script/test-smoke.sh @@ -3,6 +3,8 @@ set -ex shopt -s expand_aliases +export LC_ALL=C.UTF-8 +export LANG=C.UTF-8 SCRIPT_FOLDER="`dirname \"$0\"`" REPO_FOLDER="${SCRIPT_FOLDER}/../" @@ -19,41 +21,45 @@ garage status garage key list garage bucket list -dd if=/dev/urandom of=/tmp/garage.1.rnd bs=1k count=2 # < INLINE_THRESHOLD = 3072 bytes -dd if=/dev/urandom of=/tmp/garage.2.rnd bs=1M count=5 -dd if=/dev/urandom of=/tmp/garage.3.rnd bs=1M count=10 +dd if=/dev/urandom of=/tmp/garage.1.rnd bs=1k count=2 # No multipart, inline storage (< INLINE_THRESHOLD = 3072 bytes) +dd if=/dev/urandom of=/tmp/garage.2.rnd bs=1M count=5 # No multipart but file will be chunked +dd if=/dev/urandom of=/tmp/garage.3.rnd bs=1M count=10 # by default, AWS starts using multipart at 8MB echo "s3 api testing..." +awsgrg --version +s3cmd --version +python3 --version + for idx in $(seq 1 3); do - # AWS sends - awsgrg cp /tmp/garage.$idx.rnd s3://eprouvette/garage.$idx.aws - + # AWS sends + awsgrg cp "/tmp/garage.$idx.rnd" "s3://eprouvette/&+-é\"/garage.$idx.aws" + awsgrg ls s3://eprouvette - - awsgrg cp s3://eprouvette/garage.$idx.aws /tmp/garage.$idx.dl + + awsgrg cp "s3://eprouvette/&+-é\"/garage.$idx.aws" "/tmp/garage.$idx.dl" diff /tmp/garage.$idx.rnd /tmp/garage.$idx.dl rm /tmp/garage.$idx.dl - - s3grg get s3://eprouvette/garage.$idx.aws /tmp/garage.$idx.dl + + s3grg get "s3://eprouvette/&+-é\"/garage.$idx.aws" "/tmp/garage.$idx.dl" diff /tmp/garage.$idx.rnd /tmp/garage.$idx.dl rm /tmp/garage.$idx.dl - - awsgrg rm s3://eprouvette/garage.$idx.aws + + awsgrg rm "s3://eprouvette/&+-é\"/garage.$idx.aws" # S3CMD sends - s3grg put /tmp/garage.$idx.rnd s3://eprouvette/garage.$idx.s3cmd + s3grg put "/tmp/garage.$idx.rnd" "s3://eprouvette/&+-é\"/garage.$idx.s3cmd" s3grg ls s3://eprouvette - s3grg get s3://eprouvette/garage.$idx.s3cmd /tmp/garage.$idx.dl + s3grg get "s3://eprouvette/&+-é\"/garage.$idx.s3cmd" "/tmp/garage.$idx.dl" diff /tmp/garage.$idx.rnd /tmp/garage.$idx.dl rm /tmp/garage.$idx.dl - - awsgrg cp s3://eprouvette/garage.$idx.s3cmd /tmp/garage.$idx.dl + + awsgrg cp "s3://eprouvette/&+-é\"/garage.$idx.s3cmd" "/tmp/garage.$idx.dl" diff /tmp/garage.$idx.rnd /tmp/garage.$idx.dl rm /tmp/garage.$idx.dl - s3grg rm s3://eprouvette/garage.$idx.s3cmd + s3grg rm "s3://eprouvette/&+-é\"/garage.$idx.s3cmd" done rm /tmp/garage.{1,2,3}.rnd From 642186c53051b9edf8a23073a7fd17d7d7e2b819 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 27 Apr 2021 23:10:43 +0200 Subject: [PATCH 2/2] Fix #59 (& issue) --- src/api/encoding.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/api/encoding.rs b/src/api/encoding.rs index 63c5dee2..b3fbbe34 100644 --- a/src/api/encoding.rs +++ b/src/api/encoding.rs @@ -2,7 +2,8 @@ /// Escape &str for xml inclusion pub fn xml_escape(s: &str) -> String { - s.replace("<", "<") + s.replace("&", "&") + .replace("<", "<") .replace(">", ">") .replace("\"", """) }