Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Fix #301 -- infinite retry loop when file not found * When an integer config value is unset, return the default, if set or else fail. * If decrementing the retry counter results in a negative number (not just zero) then fail.
Matthew Seaman committed 13 years ago
commit 903f786369cb2023b94629d6a2843c4011348a15
parent e496ef7
2 files changed +11 -4
modified libpkg/fetch.c
@@ -92,7 +92,7 @@ pkg_fetch_file(const char *url, const char *dest, time_t t)
		remote = fetchXGet(u, &st, "");
		if (remote == NULL) {
			--retry;
-
			if (retry == 0) {
+
			if (retry <= 0) {
				pkg_emit_error("%s: %s", url,
				    fetchLastErrString);
				retcode = EPKG_FATAL;
modified libpkg/pkg_config.c
@@ -281,8 +281,6 @@ pkg_config_int64(pkg_config_key key, int64_t *val)
{
	const char *errstr = NULL;

-
	*val = 0;
-

	if (parsed != true) {
		pkg_emit_error("pkg_init() must be called before pkg_config_int64()");
		return (EPKG_FATAL);
@@ -299,7 +297,16 @@ pkg_config_int64(pkg_config_key key, int64_t *val)
			    c[key].val, errstr);
			return (EPKG_FATAL);
		}
-
	}
+
	} else if (c[key].def != NULL) {
+
		*val = strtonum(c[key].def, 0, INT64_MAX, &errstr);
+
		if (errstr != NULL) {
+
			pkg_emit_error("Unable to convert default value %s to int64: %s",
+
			    c[key].def, errstr);
+
			return (EPKG_FATAL);
+
		}
+
	} else
+
		return (EPKG_FATAL); /* No value set, and no default */
+

	return (EPKG_OK);
}