diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py --- a/mercurial/obsolete.py +++ b/mercurial/obsolete.py @@ -414,16 +414,16 @@ data.extend(parents) totalsize = _calcsize(format) for key, value in metadata: - lk = len(key) - lv = len(value) + lk = min(len(key), 255) + lv = min(len(value), 255) data.append(lk) data.append(lv) totalsize += lk + lv data[0] = totalsize data = [_pack(format, *data)] for key, value in metadata: - data.append(key) - data.append(value) + data.append(key[:255]) + data.append(value[:255]) return ''.join(data) def _fm1readmarkers(data, off, stop): diff --git a/tests/test-obsolete-bounds-checking.t b/tests/test-obsolete-bounds-checking.t new file mode 100644 --- /dev/null +++ b/tests/test-obsolete-bounds-checking.t @@ -0,0 +1,17 @@ +Create a repo, set the username to something more than 255 bytes, then run hg amend on it. + + $ cat >> $HGRCPATH << EOF + > [ui] + > username = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + > [extensions] + > amend = + > EOF + $ hg init tmpa + $ cd tmpa + $ echo a > a + $ hg add + adding a + $ hg commit -m "Initial commit" + $ echo a >> a + $ hg amend + saved backup bundle to $TESTTMP/tmpa/.hg/strip-backup/78a4d7b136df-b05e3630-amend.hg (glob)