diff --git a/src/util/AllocatedString.hxx b/src/util/AllocatedString.hxx
index 6d02aa25e..e977712fc 100644
--- a/src/util/AllocatedString.hxx
+++ b/src/util/AllocatedString.hxx
@@ -65,7 +65,10 @@ public:
 	BasicAllocatedString(std::nullptr_t n) noexcept
 		:value(n) {}
 
-	explicit BasicAllocatedString(string_view src) noexcept
+	explicit BasicAllocatedString(string_view src)
+		:value(Duplicate(src)) {}
+
+	explicit BasicAllocatedString(const_pointer src)
 		:value(Duplicate(src)) {}
 
 	BasicAllocatedString(BasicAllocatedString &&src) noexcept
@@ -144,6 +147,12 @@ private:
 		*std::copy_n(src.data(), src.size(), p) = SENTINEL;
 		return p;
 	}
+
+	static pointer Duplicate(const_pointer src) {
+		return src != nullptr
+			? Duplicate(std::string_view(src))
+			: nullptr;
+	}
 };
 
 class AllocatedString : public BasicAllocatedString<char> {