amend: prevent '\n' in the note string
authorMatt Harbison <matt_harbison@yahoo.com>
Sat, 14 Sep 2019 18:44:18 -0400
changeset 42933 7e9997041781
parent 42932 e4803231f538
child 42934 09d46b90f6f9
amend: prevent '\n' in the note string This comes from the evolve function. I'm not sure why this check was missing in core, since it was present when the length check was added to evolve. I didn't flag this as BC because 530b7361e3a9 mentioned this argument wasn't added to the release notes due to no display capability, and that hasn't changed AFAIK. Differential Revision: https://phab.mercurial-scm.org/D6854
hgext/amend.py
mercurial/cmdutil.py
--- a/hgext/amend.py	Sat Sep 14 15:13:16 2019 -0400
+++ b/hgext/amend.py	Sat Sep 14 18:44:18 2019 -0400
@@ -16,7 +16,6 @@
 from mercurial import (
     cmdutil,
     commands,
-    error,
     pycompat,
     registrar,
 )
@@ -50,8 +49,8 @@
     See :hg:`help commit` for more details.
     """
     opts = pycompat.byteskwargs(opts)
-    if len(opts['note']) > 255:
-        raise error.Abort(_("cannot store a note of more than 255 bytes"))
+    cmdutil.checknotesize(ui, opts)
+
     with repo.wlock(), repo.lock():
         if not opts.get('logfile'):
             opts['message'] = opts.get('message') or repo['.'].description()
--- a/mercurial/cmdutil.py	Sat Sep 14 15:13:16 2019 -0400
+++ b/mercurial/cmdutil.py	Sat Sep 14 18:44:18 2019 -0400
@@ -210,6 +210,18 @@
 
     return datemaydiffer
 
+def checknotesize(ui, opts):
+    """ make sure note is of valid format """
+
+    note = opts.get('note')
+    if not note:
+        return
+
+    if len(note) > 255:
+        raise error.Abort(_(b"cannot store a note of more than 255 bytes"))
+    if b'\n' in note:
+        raise error.Abort(_(b"note cannot contain a newline"))
+
 def ishunk(x):
     hunkclasses = (crecordmod.uihunk, patch.recordhunk)
     return isinstance(x, hunkclasses)