Skip to content

Commit 7b5c864

Browse files
Copilotbbartels
andauthored
fix: harden sdkman and ruby mirror config writes
Agent-Logs-Url: https://github.com/bbartels/features/sessions/47fca3d3-4eb7-487d-9af5-e4b462552066 Co-authored-by: bbartels <[email protected]>
1 parent 151d0a6 commit 7b5c864

2 files changed

Lines changed: 20 additions & 6 deletions

File tree

src/java/install.sh

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -326,12 +326,15 @@ if [ ! -d "${SDKMAN_DIR}" ]; then
326326
fi
327327
curl -sSL "https://get.sdkman.io?rcupdate=false" | bash
328328
if [ -n "${SDKMAN_SERVICE_MIRROR:-}" ] && [ -f "${SDKMAN_DIR}/etc/config" ]; then
329-
sdkman_service_mirror_escaped="$(printf '%s\n' "${SDKMAN_SERVICE_MIRROR}" | sed 's/[&|\\]/\\&/g')"
330-
if grep -q "^sdkman_api=" "${SDKMAN_DIR}/etc/config"; then
331-
sed -i "s|^sdkman_api=.*|sdkman_api=${sdkman_service_mirror_escaped}|" "${SDKMAN_DIR}/etc/config"
332-
else
333-
echo "sdkman_api=${SDKMAN_SERVICE_MIRROR}" >> "${SDKMAN_DIR}/etc/config"
334-
fi
329+
sdkman_config_tmp="$(mktemp)"
330+
awk -v api="${SDKMAN_SERVICE_MIRROR}" '
331+
BEGIN { updated=0 }
332+
/^sdkman_api=/ { print "sdkman_api=" api; updated=1; next }
333+
{ print }
334+
END { if (updated == 0) print "sdkman_api=" api }
335+
' "${SDKMAN_DIR}/etc/config" > "${sdkman_config_tmp}"
336+
cat "${sdkman_config_tmp}" > "${SDKMAN_DIR}/etc/config"
337+
rm -f "${sdkman_config_tmp}"
335338
fi
336339
# For RHEL 8 systems, also disable native CLI in config file and remove native binaries
337340
if [ "${ADJUSTED_ID}" = "rhel" ] && [ "${MAJOR_VERSION_ID}" = "8" ]; then

src/ruby/install.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,15 @@ set_rvm_install_args() {
328328
fi
329329
}
330330

331+
validate_mirror_url() {
332+
local mirror_name="$1"
333+
local mirror_url="$2"
334+
if [ -n "${mirror_url}" ] && [[ ! "${mirror_url}" =~ ^https?:// ]]; then
335+
echo "(!) ${mirror_name} must start with http:// or https://"
336+
exit 1
337+
fi
338+
}
339+
331340
run_rvm_installer() {
332341
local install_args="$1"
333342
if [ -n "${RVM_INSTALL_MIRROR:-}" ]; then
@@ -376,6 +385,8 @@ else
376385
echo "(!) Mirror values must not contain newlines."
377386
exit 1
378387
fi
388+
validate_mirror_url "RUBY_SOURCE_MIRROR" "${RUBY_SOURCE_MIRROR:-}"
389+
validate_mirror_url "RUBY_BINARIES_MIRROR" "${RUBY_BINARIES_MIRROR:-}"
379390
if [ -n "${RUBY_SOURCE_MIRROR:-}" ] && ! grep -Fqx "rvm_rubies_url=${RUBY_SOURCE_MIRROR}" /etc/rvmrc 2>/dev/null; then
380391
echo "rvm_rubies_url=${RUBY_SOURCE_MIRROR}" >> /etc/rvmrc
381392
fi

0 commit comments

Comments
 (0)