Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Reject old digests.
Vsevolod Stakhov committed 11 years ago
commit 10a4925da39008cef1833d5334dec4d83465f7d1
parent c5b4e14
2 files changed +20 -3
modified libpkg/pkg.c
@@ -306,9 +306,12 @@ pkg_vset(struct pkg *pkg, va_list ap)
				data = pkg_repo_url(r);
			}

-
			ucl_object_replace_key(pkg->fields,
-
			    ucl_object_fromstring_common(data, strlen(data), 0),
-
			    pkg_keys[attr].name, strlen(pkg_keys[attr].name), false);
+
			if (data == NULL)
+
				ucl_object_delete_key(pkg->fields, pkg_keys[attr].name);
+
			else
+
				ucl_object_replace_key(pkg->fields,
+
				    ucl_object_fromstring_common(data, strlen(data), 0),
+
				    pkg_keys[attr].name, strlen(pkg_keys[attr].name), false);

			if (buf != NULL)
				free(buf);
modified libpkg/pkgdb.c
@@ -1479,9 +1479,19 @@ pkgdb_it_next(struct pkgdb_it *it, struct pkg **pkg_p, unsigned flags)
	struct pkg	*pkg;
	int		 i;
	int		 ret;
+
	const char *digest;

	assert(it != NULL);

+
	/*
+
	 * XXX:
+
	 * Currently, we have a lot of issues related to pkg digests.
+
	 * So we want to ensure that we always have a valid package digest
+
	 * even if we work with pkg 1.2 repo. Therefore, we explicitly check
+
	 * manifest digests and set it to NULL if it is invalid.
+
	 *
+
	 */
+

	if (it->finished && (it->flags & PKGDB_IT_FLAG_ONCE))
		return (EPKG_END);

@@ -1497,6 +1507,10 @@ pkgdb_it_next(struct pkgdb_it *it, struct pkg **pkg_p, unsigned flags)

		populate_pkg(it->stmt, pkg);

+
		pkg_get(pkg, PKG_DIGEST, &digest);
+
		if (!pkg_checksum_is_valid(digest, strlen(digest)))
+
			pkg_set(pkg, PKG_DIGEST, NULL);
+

		for (i = 0; load_on_flag[i].load != NULL; i++) {
			if (flags & load_on_flag[i].flag) {
				if (it->db != NULL) {