Mercurial > hg-stable
changeset 38708:ff1182d166a2
obsolete: explode if metadata contains invalid UTF-8 sequence (API)
The current metadata API can be a source of bugs since it forces callers to
process encoding conversion by themselves. So let's make it reject bad data
as a last ditch. I assume there's no metadata field which is supposed to store
arbitrary BLOB like transplant_source.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 15 Jul 2018 18:32:17 +0900 |
parents | 6b5ca1d0aa1e |
children | 6a032a8f741b |
files | mercurial/obsolete.py |
diffstat | 1 files changed, 11 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/obsolete.py Sun Jul 15 18:24:57 2018 +0900 +++ b/mercurial/obsolete.py Sun Jul 15 18:32:17 2018 +0900 @@ -80,6 +80,7 @@ obsutil, phases, policy, + pycompat, util, ) from .utils import dateutil @@ -600,6 +601,16 @@ raise ValueError(_('in-marker cycle with %s') % node.hex(prec)) metadata = tuple(sorted(metadata.iteritems())) + for k, v in metadata: + try: + # might be better to reject non-ASCII keys + k.decode('utf-8') + v.decode('utf-8') + except UnicodeDecodeError: + raise error.ProgrammingError( + 'obsstore metadata must be valid UTF-8 sequence ' + '(key = %r, value = %r)' + % (pycompat.bytestr(k), pycompat.bytestr(v))) marker = (bytes(prec), tuple(succs), int(flag), metadata, date, parents) return bool(self.add(transaction, [marker]))