aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/legacy-ssh-store.cc6
-rw-r--r--src/libstore/local-store.cc4
-rw-r--r--src/libstore/remote-store.cc4
3 files changed, 5 insertions, 9 deletions
diff --git a/src/libstore/legacy-ssh-store.cc b/src/libstore/legacy-ssh-store.cc
index 9b6e6e6d7..b43e34484 100644
--- a/src/libstore/legacy-ssh-store.cc
+++ b/src/libstore/legacy-ssh-store.cc
@@ -114,11 +114,7 @@ struct LegacySSHStore : public Store
if (GET_PROTOCOL_MINOR(conn->remoteVersion) >= 4) {
auto s = readString(conn->from);
info->narHash = s.empty() ? Hash() : Hash(s);
- {
- std::string rawCaOpt;
- conn->from >> rawCaOpt;
- info->ca = parseContentAddressOpt(rawCaOpt);
- }
+ info->ca = parseContentAddressOpt(readString(conn->from));
info->sigs = readStrings<StringSet>(conn->from);
}
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index 2067343c7..93697ae47 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -999,7 +999,9 @@ void LocalStore::addToStore(const ValidPathInfo & info, Source & source,
deletePath(realPath);
- if (info.ca && !info.references.empty() && !std::holds_alternative<TextHash>(*info.ca))
+ // text hashing has long been allowed to have non-self-references because it is used for drv files.
+ bool refersToSelf = info.references.count(info.path) > 0;
+ if (info.ca && !info.references.empty() && !(std::holds_alternative<TextHash>(*info.ca) && !refersToSelf))
settings.requireExperimentalFeature("ca-references");
/* While restoring the path from the NAR, compute the hash
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index 6dab9dc16..0faa4d824 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -381,9 +381,7 @@ void RemoteStore::queryPathInfoUncached(const StorePath & path,
if (GET_PROTOCOL_MINOR(conn->daemonVersion) >= 16) {
conn->from >> info->ultimate;
info->sigs = readStrings<StringSet>(conn->from);
- string caOptRaw;
- conn->from >> caOptRaw;
- info->ca = parseContentAddressOpt(caOptRaw);
+ info->ca = parseContentAddressOpt(readString(conn->from));
}
}
callback(std::move(info));