diff mercurial/obsolete.py @ 34408:b6692ba7d5b0

obsmarker: crash more helpfully when metadata fields are >255bytes (issue5681) Various mutators fail when attempting to write obsmarkers with metadata fields longer than 255 bytes, since the length of mwetadata fields is stored in u8s. This change raises a more helpful error in such circumstances. Differential Revision: https://phab.mercurial-scm.org/D865
author Simon Whitaker <swhitaker@fb.com>
date Sun, 01 Oct 2017 12:54:35 +0100
parents ddcef6d0b0ef
children 014d467f9d08
line wrap: on
line diff
--- a/mercurial/obsolete.py	Sun Oct 01 03:31:32 2017 -0700
+++ b/mercurial/obsolete.py	Sun Oct 01 12:54:35 2017 +0100
@@ -416,6 +416,14 @@
     for key, value in metadata:
         lk = len(key)
         lv = len(value)
+        if lk > 255:
+            msg = ('obsstore metadata key cannot be longer than 255 bytes'
+                   ' (key "%s" is %u bytes)') % (key, lk)
+            raise error.ProgrammingError(msg)
+        if lv > 255:
+            msg = ('obsstore metadata value cannot be longer than 255 bytes'
+                   ' (value "%s" for key "%s" is %u bytes)') % (value, key, lv)
+            raise error.ProgrammingError(msg)
         data.append(lk)
         data.append(lv)
         totalsize += lk + lv