Skip to content

Filter out Bash read-only env vars in export_env() (such as UID) #1751

@edmorley

Description

@edmorley

While looking at build failure metrics, I noticed this internal error:

-----> Installing dependencies using 'pip install -r requirements.txt'
/tmp/codon/tmp/buildpacks/0f40890b54a617ec2334fac0439a123c6a0c1136/vendor/buildpack-stdlib_v8.sh: line 56: UID: readonly variable
 !     Push rejected, failed to compile Python app.

This appears to be due to an app having the env var UID set in it's config vars, and UID being a read-only Bash env var.

We should filter this env var out (along with any others labelled as readonly on https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html), here:

# Usage: $ export-env ENV_DIR WHITELIST BLACKLIST
# Exports the environment variables defined in the given directory.
export_env() {
local env_dir=${1:-$ENV_DIR}
local whitelist=${2:-''}
local blacklist
blacklist="$(_env_blacklist "$3")"
if [[ -d "$env_dir" ]]; then
# Environment variable names won't contain characters affected by:
# shellcheck disable=SC2045
for e in $(ls "$env_dir"); do
echo "$e" | grep -E "$whitelist" | grep -qvE "$blacklist" \
&& export "$e=$(cat "$env_dir/$e")"
:
done
fi
}

We should probably do this before implementing #1451 / #1700.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions