Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
libpkg: validate SHLIB_PROVIDE_PATHS_* options
Isaac Freund committed 1 year ago
commit 705dff9ef28c6fc59691eb04e219cd12a3879cc8
parent 4dec5da
2 files changed +51 -1
modified libpkg/pkg_config.c
@@ -1050,6 +1050,33 @@ config_validate_debug_flags(const ucl_object_t *o)
	return (ret);
}

+
static bool
+
config_validate_shlib_provide_paths() {
+
	const char *config_options[] = {
+
		"SHLIB_PROVIDE_PATHS_NATIVE",
+
		"SHLIB_PROVIDE_PATHS_COMPAT_32",
+
		"SHLIB_PROVIDE_PATHS_COMPAT_LINUX",
+
		"SHLIB_PROVIDE_PATHS_COMPAT_LINUX_32",
+
		NULL,
+
	};
+
	bool valid = true;
+
	for (const char **option = config_options; *option != NULL; option++) {
+
		const ucl_object_t *paths = pkg_config_get(*option);
+
		const ucl_object_t *cur;
+
		ucl_object_iter_t it = NULL;
+
		while ((cur = ucl_object_iterate(paths, &it, true))) {
+
			const char *path = ucl_object_tostring(cur);
+
			if (path[0] != '/') {
+
				pkg_emit_error("Invalid value for config option %s, "
+
				    "'%s' is not an absolute path.",
+
				    *option, path);
+
				valid = false;
+
			}
+
		}
+
	}
+
	return valid;
+
}
+

/* Parses ABI_FILE, ABI, ALTABI, and OSVERSION from the given ucl file and sets
 * the values in the environment. These values must be parsed separately from
 * the rest of the config because they are made available as variable expansions
@@ -1486,6 +1513,11 @@ pkg_ini(const char *path, const char *reposdir, pkg_init_flags flags)
	ucl_object_unref(obj);
	ucl_parser_free(p);

+
	if (!config_validate_shlib_provide_paths()) {
+
		err = EPKG_FATAL;
+
		goto out;
+
	}
+

	{
		/* Even though we no longer support setting ABI/ALTABI/OSVERSION
		   in the pkg.conf config file, we still need to expose these
modified tests/frontend/config.sh
@@ -6,7 +6,8 @@ tests_init \
	duplicate_pkgs_notallowed \
	inline_repo \
	nameserver \
-
	expansion
+
	expansion \
+
	validate_shlib_provide_paths
#	duplicate_pkgs_allowed \

duplicate_pkgs_allowed_body() {
@@ -140,3 +141,20 @@ expansion_body() {
	atf_check -o inline:"${ARCH}\n" pkg -C ${TMPDIR}/pkg.conf config dot_file

}
+

+
validate_shlib_provide_paths_body() {
+
	for option in \
+
		SHLIB_PROVIDE_PATHS_NATIVE \
+
		SHLIB_PROVIDE_PATHS_COMPAT_32 \
+
		SHLIB_PROVIDE_PATHS_COMPAT_LINUX \
+
		SHLIB_PROVIDE_PATHS_COMPAT_LINUX_32
+
	do
+
		atf_check -o inline:"/bar/foo\n" -s exit:0 pkg -o $option=/bar/foo config $option
+

+
		ERROR="pkg: Invalid value for config option ${option}, 'foo' is not an absolute path.
+
pkg: Cannot parse configuration file!
+
"
+
		atf_check -e inline:"${ERROR}" -s exit:1 pkg -o $option=foo config $option
+
		atf_check -e inline:"${ERROR}" -s exit:1 pkg -o $option=/bar/foo,foo config $option
+
	done
+
}