Patchwork D6854: amend: prevent '\n' in the note string

login
register
mail settings
Submitter phabricator
Date Sept. 16, 2019, 5:56 p.m.
Message ID <c6b19dd0f6e402fce4907d1fb3a87cba@localhost.localdomain>
Download mbox | patch
Permalink /patch/41686/
State Not Applicable
Headers show

Comments

phabricator - Sept. 16, 2019, 5:56 p.m.
Closed by commit rHG7e9997041781: amend: prevent &#039;\n&#039; in the note string (authored by mharbison72).
This revision was automatically updated to reflect the committed changes.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D6854?vs=16547&id=16556

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D6854/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D6854

AFFECTED FILES
  hgext/amend.py
  mercurial/cmdutil.py

CHANGE DETAILS




To: mharbison72, #hg-reviewers, pulkit
Cc: mercurial-devel

Patch

diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -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)
diff --git a/hgext/amend.py b/hgext/amend.py
--- a/hgext/amend.py
+++ b/hgext/amend.py
@@ -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()