From d839c2110a78ce009ac86e8aeeff3d784c582661 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 20 Feb 2019 14:22:31 -0400 Subject: [PATCH] fix encoding of metadata containing newlines This fixes a reversion in the ByteString conversion. The old code used isSpace to decide when the metadata value needs to be base64 encoded, and that incorrectly changed to only checking if it contained ' '. Note that only '\n' and '\r' were added and not other sorts of whitespace that isSpace matches, like '\t' and '\v'. Only the former would cause problems. --- CHANGELOG | 7 +++++++ Types/MetaData.hs | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index be07b04817..b74d7d1fde 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,10 @@ +git-annex (7.20190220) UNRELEASED; urgency=medium + + * Fix storage of metadata values containing newlines. + (Reversion introduced in version 7.20190122.) + + -- Joey Hess Wed, 20 Feb 2019 14:20:59 -0400 + git-annex (7.20190219) upstream; urgency=medium * init: Fix bug when direct mode needs to be enabled on a crippled diff --git a/Types/MetaData.hs b/Types/MetaData.hs index 1e30a44429..6ee60b3e2d 100644 --- a/Types/MetaData.hs +++ b/Types/MetaData.hs @@ -136,7 +136,7 @@ instance MetaSerializable MetaField where instance MetaSerializable MetaValue where serialize (MetaValue isset v) = serialize isset <> - if B8.any (== ' ') v || "!" `B8.isPrefixOf` v + if B8.any (`elem` [' ', '\r', '\n']) v || "!" `B8.isPrefixOf` v then "!" <> toB64' v else v deserialize b = do