Skip to content

Commit 934fde1

Browse files
committed
Sanitize Patterns, Licenses 2025-07-29
Signed-off-by: Julio Jimenez <julio@clickhouse.com>
1 parent cfcd863 commit 934fde1

3 files changed

Lines changed: 90 additions & 8 deletions

File tree

lib/sanitize.sh

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,38 @@ sanitize_database_name() {
176176
echo "$sanitized"
177177
}
178178

179+
# Sanitize comma-separated patterns (for include/exclude)
180+
sanitize_patterns() {
181+
local patterns="$1"
182+
183+
if [[ -z "$patterns" ]]; then
184+
echo ""
185+
return
186+
fi
187+
188+
# Split by comma and sanitize each pattern
189+
local sanitized_patterns=()
190+
IFS=',' read -ra pattern_array <<< "$patterns"
191+
192+
for pattern in "${pattern_array[@]}"; do
193+
# Trim whitespace
194+
pattern=$(echo "$pattern" | xargs)
195+
196+
# Remove dangerous characters but keep wildcards
197+
local sanitized_pattern
198+
sanitized_pattern=$(echo "$pattern" | sed 's/[^a-zA-Z0-9.*_-]//g')
199+
200+
if [[ -n "$sanitized_pattern" ]]; then
201+
sanitized_patterns+=("$sanitized_pattern")
202+
fi
203+
done
204+
205+
# Join back with commas
206+
local result
207+
result=$(IFS=','; echo "${sanitized_patterns[*]}")
208+
echo "$result"
209+
}
210+
179211
# Main sanitization function - sanitizes all environment variables
180212
sanitize_inputs() {
181213
log_debug "Sanitizing input parameters..."
@@ -347,15 +379,15 @@ sanitize_inputs() {
347379
# log_debug "Validated MERGE: $MERGE"
348380
# fi
349381

350-
# if [[ -n "${INCLUDE:-}" ]]; then
351-
# INCLUDE=$(sanitize_patterns "$INCLUDE")
352-
# log_debug "Sanitized INCLUDE: $INCLUDE"
353-
# fi
382+
if [[ -n "${INCLUDE:-}" ]]; then
383+
INCLUDE=$(sanitize_patterns "$INCLUDE")
384+
log_debug "Sanitized INCLUDE: $INCLUDE"
385+
fi
354386

355-
# if [[ -n "${EXCLUDE:-}" ]]; then
356-
# EXCLUDE=$(sanitize_patterns "$EXCLUDE")
357-
# log_debug "Sanitized EXCLUDE: $EXCLUDE"
358-
# fi
387+
if [[ -n "${EXCLUDE:-}" ]]; then
388+
EXCLUDE=$(sanitize_patterns "$EXCLUDE")
389+
log_debug "Sanitized EXCLUDE: $EXCLUDE"
390+
fi
359391

360392
# Sanitize tokens (GitHub token, etc.) - just remove dangerous characters
361393
if [[ -n "${GITHUB_TOKEN:-}" ]]; then

license-mappings.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@
188188
"github.com/butuzov/mirror": "MIT",
189189
"github.com/bytedance/sonic": "Apache-2.0",
190190
"github.com/bytedance/sonic/loader": "Apache-2.0",
191+
"github.com/c-bata/go-prompt": "MIT",
191192
"github.com/Azure/azure-amqp-common-go/v3": "MIT",
192193
"github.com/Azure/azure-pipeline-go": "MIT",
193194
"github.com/Azure/azure-sdk-for-go-extensions": "MIT",

test/simple.bats

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,3 +707,52 @@ EOF
707707
[ "$status" -eq 0 ]
708708
[[ "$output" == "testdatabase" ]]
709709
}
710+
711+
# Test 79: sanitize_patterns accepts valid patterns
712+
@test "sanitize_patterns accepts valid patterns" {
713+
run sanitize_patterns "*.json,test*.txt,file.log"
714+
[ "$status" -eq 0 ]
715+
[[ "$output" == "*.json,test*.txt,file.log" ]]
716+
}
717+
718+
# Test 80: sanitize_patterns trims whitespace
719+
@test "sanitize_patterns trims whitespace" {
720+
run sanitize_patterns " *.json , test*.txt , file.log "
721+
[ "$status" -eq 0 ]
722+
[[ "$output" == "*.json,test*.txt,file.log" ]]
723+
}
724+
725+
# Test 81: sanitize_patterns removes dangerous characters
726+
@test "sanitize_patterns removes dangerous characters" {
727+
run sanitize_patterns "*.json,test\$bad.txt"
728+
[ "$status" -eq 0 ]
729+
[[ "$output" == "*.json,testbad.txt" ]]
730+
}
731+
732+
# Test 82: sanitize_patterns preserves valid wildcards
733+
@test "sanitize_patterns preserves wildcards" {
734+
run sanitize_patterns "*-prod.json,production-*.json"
735+
[ "$status" -eq 0 ]
736+
[[ "$output" == "*-prod.json,production-*.json" ]]
737+
}
738+
739+
# Test 83: sanitize_patterns handles empty input
740+
@test "sanitize_patterns handles empty input" {
741+
run sanitize_patterns ""
742+
[ "$status" -eq 0 ]
743+
[[ "$output" == "" ]]
744+
}
745+
746+
# Test 84: sanitize_patterns removes empty patterns
747+
@test "sanitize_patterns removes empty patterns" {
748+
run sanitize_patterns "*.json,,test*.txt"
749+
[ "$status" -eq 0 ]
750+
[[ "$output" == "*.json,test*.txt" ]]
751+
}
752+
753+
# Test 85: sanitize_patterns handles single pattern
754+
@test "sanitize_patterns handles single pattern" {
755+
run sanitize_patterns "*.json"
756+
[ "$status" -eq 0 ]
757+
[[ "$output" == "*.json" ]]
758+
}

0 commit comments

Comments
 (0)