GNU bug report logs - #35368
[PATCH] Do potentially destructive operations in prepare-commit-msg

Previous Next

Package: emacs;

Reported by: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>

Date: Sun, 21 Apr 2019 20:04:02 UTC

Severity: wishlist

Tags: fixed, patch

Done: Noam Postavsky <npostavs <at> gmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 35368 in the body.
You can then email your comments to 35368 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Sun, 21 Apr 2019 20:04:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Konstantin Kharlamov <Hi-Angel <at> yandex.ru>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sun, 21 Apr 2019 20:04:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
To: bug-gnu-emacs <at> gnu.org
Subject: [PATCH] Do potentially destructive operations in prepare-commit-msg
Date: Sun, 21 Apr 2019 23:03:13 +0300
* build-aux/git-hooks/prepare-commit-msg: if someone occasionally puts
Signed-off line, it will likely get there through -s option of git.
Exploit this fact to abort before a user got a chance to type commit
message.
---
 autogen.sh                             |  2 +-
 build-aux/git-hooks/prepare-commit-msg | 59 ++++++++++++++++++++++++++
 2 files changed, 60 insertions(+), 1 deletion(-)
 create mode 100755 build-aux/git-hooks/prepare-commit-msg

diff --git a/autogen.sh b/autogen.sh
index 40d0c37b11b..c85ecfecac6 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -332,7 +332,7 @@ hooks=
 tailored_hooks=
 sample_hooks=
 
-for hook in commit-msg pre-commit; do
+for hook in commit-msg pre-commit prepare-commit-msg; do
     cmp -- build-aux/git-hooks/$hook "$hooks/$hook" >/dev/null 2>&1 ||
 	tailored_hooks="$tailored_hooks $hook"
 done
diff --git a/build-aux/git-hooks/prepare-commit-msg b/build-aux/git-hooks/prepare-commit-msg
new file mode 100755
index 00000000000..ed4eab6063c
--- /dev/null
+++ b/build-aux/git-hooks/prepare-commit-msg
@@ -0,0 +1,59 @@
+#!/bin/sh
+# Check the format of GNU Emacs change log entries.
+
+# Copyright 2019 Free Software Foundation, Inc.
+
+# This file is part of GNU Emacs.
+
+# GNU Emacs is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# GNU Emacs is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+COMMIT_MSG_FILE=$1
+COMMIT_SOURCE=$2
+SHA1=$3
+
+# Prefer gawk if available, as it handles NUL bytes properly.
+if type gawk >/dev/null 2>&1; then
+  awk=gawk
+else
+  awk=awk
+fi
+
+# Use a UTF-8 locale if available, so that the UTF-8 check works.
+# Use U+00A2 CENT SIGN to test whether the locale works.
+cent_sign_utf8_format='\302\242\n'
+cent_sign=`printf "$cent_sign_utf8_format"`
+print_at_sign='BEGIN {print substr("'$cent_sign'@", 2)}'
+at_sign=`$awk "$print_at_sign" </dev/null 2>/dev/null`
+if test "$at_sign" != @; then
+  at_sign=`LC_ALL=en_US.UTF-8 $awk "$print_at_sign" </dev/null 2>/dev/null`
+  if test "$at_sign" = @; then
+    LC_ALL=en_US.UTF-8
+  else
+    LC_ALL=C
+  fi
+  export LC_ALL
+fi
+
+exec $awk -v at_sign="$at_sign" -v cent_sign="$cent_sign" -v file="$1" '
+  /^Signed-off-by: / {
+    print "'\''Signed-off-by:'\'' in commit message"
+    status = 1
+  }
+  END {
+    if (status != 0) {
+      print "Commit aborted; please see the file 'CONTRIBUTE'"
+    }
+    exit status
+  }
+' <"$1"
-- 
2.21.0





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Sun, 21 Apr 2019 20:18:02 GMT) Full text and rfc822 format available.

Message #8 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
To: 35368 <at> debbugs.gnu.org
Subject: [PATCH v2] Do potentially destructive operations in prepare-commit-msg
Date: Sun, 21 Apr 2019 23:17:30 +0300
* build-aux/git-hooks/prepare-commit-msg: if someone occasionally puts
Signed-off line, it will likely get there through -s option of git.
Exploit this fact to abort before a user got a chance to type commit
message.
---

v2: instead of "magic" $1 use $COMMIT_MSG_FILE

 autogen.sh                             |  2 +-
 build-aux/git-hooks/prepare-commit-msg | 59 ++++++++++++++++++++++++++
 2 files changed, 60 insertions(+), 1 deletion(-)
 create mode 100755 build-aux/git-hooks/prepare-commit-msg

diff --git a/autogen.sh b/autogen.sh
index 40d0c37b11b..c85ecfecac6 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -332,7 +332,7 @@ hooks=
 tailored_hooks=
 sample_hooks=
 
-for hook in commit-msg pre-commit; do
+for hook in commit-msg pre-commit prepare-commit-msg; do
     cmp -- build-aux/git-hooks/$hook "$hooks/$hook" >/dev/null 2>&1 ||
 	tailored_hooks="$tailored_hooks $hook"
 done
diff --git a/build-aux/git-hooks/prepare-commit-msg b/build-aux/git-hooks/prepare-commit-msg
new file mode 100755
index 00000000000..f35f1dcbbc4
--- /dev/null
+++ b/build-aux/git-hooks/prepare-commit-msg
@@ -0,0 +1,59 @@
+#!/bin/sh
+# Check the format of GNU Emacs change log entries.
+
+# Copyright 2019 Free Software Foundation, Inc.
+
+# This file is part of GNU Emacs.
+
+# GNU Emacs is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# GNU Emacs is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+COMMIT_MSG_FILE=$1
+COMMIT_SOURCE=$2
+SHA1=$3
+
+# Prefer gawk if available, as it handles NUL bytes properly.
+if type gawk >/dev/null 2>&1; then
+  awk=gawk
+else
+  awk=awk
+fi
+
+# Use a UTF-8 locale if available, so that the UTF-8 check works.
+# Use U+00A2 CENT SIGN to test whether the locale works.
+cent_sign_utf8_format='\302\242\n'
+cent_sign=`printf "$cent_sign_utf8_format"`
+print_at_sign='BEGIN {print substr("'$cent_sign'@", 2)}'
+at_sign=`$awk "$print_at_sign" </dev/null 2>/dev/null`
+if test "$at_sign" != @; then
+  at_sign=`LC_ALL=en_US.UTF-8 $awk "$print_at_sign" </dev/null 2>/dev/null`
+  if test "$at_sign" = @; then
+    LC_ALL=en_US.UTF-8
+  else
+    LC_ALL=C
+  fi
+  export LC_ALL
+fi
+
+exec $awk -v at_sign="$at_sign" -v cent_sign="$cent_sign" -v file="$COMMIT_MSG_FILE" '
+  /^Signed-off-by: / {
+    print "'\''Signed-off-by:'\'' in commit message"
+    status = 1
+  }
+  END {
+    if (status != 0) {
+      print "Commit aborted; please see the file 'CONTRIBUTE'"
+    }
+    exit status
+  }
+' <"$COMMIT_MSG_FILE"
-- 
2.21.0





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Tue, 23 Apr 2019 09:58:02 GMT) Full text and rfc822 format available.

Message #11 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <hi-angel <at> yandex.ru>
To: 35368 <at> debbugs.gnu.org
Subject: Re: bug#35368: Acknowledgement ([PATCH] Do potentially destructive
 operations in prepare-commit-msg)
Date: Tue, 23 Apr 2019 12:57:06 +0300
Oh, and while on it: I'm thinking also about automatically filling the 
default commit template (i.e. files changed, functions changed — can 
be inferred for C). I'm wondering, which language would it be 
acceptable to write hook in? Python?






Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Tue, 23 Apr 2019 10:42:01 GMT) Full text and rfc822 format available.

Message #14 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Konstantin Kharlamov <hi-angel <at> yandex.ru>
Cc: 35368 <at> debbugs.gnu.org
Subject: Re: bug#35368: Acknowledgement ([PATCH] Do potentially destructive
 operations in prepare-commit-msg)
Date: Tue, 23 Apr 2019 13:40:55 +0300
> Date: Tue, 23 Apr 2019 12:57:06 +0300
> From: Konstantin Kharlamov <hi-angel <at> yandex.ru>
> 
> Oh, and while on it: I'm thinking also about automatically filling the 
> default commit template (i.e. files changed, functions changed — can 
> be inferred for C). I'm wondering, which language would it be 
> acceptable to write hook in? Python?

Emacs Lisp.  Certainly not Python.

(I'm not yet sure we would like such automation, I'm just responding
to the language question.)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Tue, 23 Apr 2019 10:44:02 GMT) Full text and rfc822 format available.

Message #17 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: "Basil L. Contovounesios" <contovob <at> tcd.ie>
To: Konstantin Kharlamov <hi-angel <at> yandex.ru>
Cc: 35368 <at> debbugs.gnu.org
Subject: Re: bug#35368: Acknowledgement ([PATCH] Do potentially destructive
 operations in prepare-commit-msg)
Date: Tue, 23 Apr 2019 11:43:16 +0100
Konstantin Kharlamov <hi-angel <at> yandex.ru> writes:

> Oh, and while on it: I'm thinking also about automatically filling the default
> commit template (i.e. files changed, functions changed — can be inferred for C).
> I'm wondering, which language would it be acceptable to write hook in? Python?

Why not Elisp?  IIUC this already exists as add-change-log-entry.

-- 
Basil




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Tue, 23 Apr 2019 11:01:01 GMT) Full text and rfc822 format available.

Message #20 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <hi-angel <at> yandex.ru>
To: "Basil L. Contovounesios" <contovob <at> tcd.ie>
Cc: 35368 <at> debbugs.gnu.org
Subject: Re: bug#35368: Acknowledgement ([PATCH] Do potentially destructive
 operations in prepare-commit-msg)
Date: Tue, 23 Apr 2019 14:00:05 +0300

On Вт, Apr 23, 2019 at 11:43, Basil L. Contovounesios 
<contovob <at> tcd.ie> wrote:
> Konstantin Kharlamov <hi-angel <at> yandex.ru> writes:
> 
>>  Oh, and while on it: I'm thinking also about automatically filling 
>> the default
>>  commit template (i.e. files changed, functions changed — can be 
>> inferred for C).
>>  I'm wondering, which language would it be acceptable to write hook 
>> in? Python?
> 
> Why not Elisp?  IIUC this already exists as add-change-log-entry.

Ok, cool, thanks folks! Yeah, then I'll probably take a look at it.


Btw, somewhat related: if anybody interested, I can share a bit of 
config: as I figured, many projects (not Emacs though) require to start 
commit message with subsystem they changed, which is often the last 
directory name. So some hours ago I made up a global prepare-commit-msg 
hook that automatically inserts name of the directory 
https://github.com/Hi-Angel/dotfiles/blob/master/.git_hooks/prepare-commit-msg 
(initially I wrote it in sh, but code was too awkward, so I rewrote it 
in Python). To make it work globally write in `core` section of 
~/.gitconfig the `hooksPath = "~/.git_hooks`






Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Tue, 14 May 2019 17:34:02 GMT) Full text and rfc822 format available.

Message #23 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: npostavs <at> gmail.com
To: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
Cc: 35368 <at> debbugs.gnu.org
Subject: Re: bug#35368: [PATCH v2] Do potentially destructive operations in
 prepare-commit-msg
Date: Tue, 14 May 2019 13:33:06 -0400
Konstantin Kharlamov <Hi-Angel <at> yandex.ru> writes:

> +# Use a UTF-8 locale if available, so that the UTF-8 check works.
> +# Use U+00A2 CENT SIGN to test whether the locale works.
> +cent_sign_utf8_format='\302\242\n'
> +cent_sign=`printf "$cent_sign_utf8_format"`
> +print_at_sign='BEGIN {print substr("'$cent_sign'@", 2)}'
> +at_sign=`$awk "$print_at_sign" </dev/null 2>/dev/null`
> +if test "$at_sign" != @; then
> +  at_sign=`LC_ALL=en_US.UTF-8 $awk "$print_at_sign" </dev/null 2>/dev/null`
> +  if test "$at_sign" = @; then
> +    LC_ALL=en_US.UTF-8
> +  else
> +    LC_ALL=C
> +  fi
> +  export LC_ALL
> +fi
> +
> +exec $awk -v at_sign="$at_sign" -v cent_sign="$cent_sign" -v file="$COMMIT_MSG_FILE" '

You don't actually need any of this at_sign and cent_sign stuff here, right?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Tue, 14 May 2019 21:23:02 GMT) Full text and rfc822 format available.

Message #26 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <hi-angel <at> yandex.ru>
To: npostavs <at> gmail.com
Cc: 35368 <at> debbugs.gnu.org
Subject: Re: bug#35368: [PATCH v2] Do potentially destructive operations in
 prepare-commit-msg
Date: Wed, 15 May 2019 00:22:02 +0300

В Вт, мая 14, 2019 at 13:33, npostavs <at> gmail.com написал:
> Konstantin Kharlamov <Hi-Angel <at> yandex.ru> writes:
> 
>>  +# Use a UTF-8 locale if available, so that the UTF-8 check works.
>>  +# Use U+00A2 CENT SIGN to test whether the locale works.
>>  +cent_sign_utf8_format='\302\242\n'
>>  +cent_sign=`printf "$cent_sign_utf8_format"`
>>  +print_at_sign='BEGIN {print substr("'$cent_sign'@", 2)}'
>>  +at_sign=`$awk "$print_at_sign" </dev/null 2>/dev/null`
>>  +if test "$at_sign" != @; then
>>  +  at_sign=`LC_ALL=en_US.UTF-8 $awk "$print_at_sign" </dev/null 
>> 2>/dev/null`
>>  +  if test "$at_sign" = @; then
>>  +    LC_ALL=en_US.UTF-8
>>  +  else
>>  +    LC_ALL=C
>>  +  fi
>>  +  export LC_ALL
>>  +fi
>>  +
>>  +exec $awk -v at_sign="$at_sign" -v cent_sign="$cent_sign" -v 
>> file="$COMMIT_MSG_FILE" '
> 
> You don't actually need any of this at_sign and cent_sign stuff here, 
> right?

Well, I honestly don't know. I didn't want to break some odd emacs 
development usecase, so I took that part of code from the current 
`commit-msg`. And if you think it's unnecessary, then it's unnecessary 
as well in the current `commit-msg`.






Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Tue, 14 May 2019 22:10:02 GMT) Full text and rfc822 format available.

Message #29 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: Noam Postavsky <npostavs <at> gmail.com>
To: Konstantin Kharlamov <hi-angel <at> yandex.ru>
Cc: 35368 <at> debbugs.gnu.org
Subject: Re: bug#35368: [PATCH v2] Do potentially destructive operations in
 prepare-commit-msg
Date: Tue, 14 May 2019 18:09:40 -0400
Konstantin Kharlamov <hi-angel <at> yandex.ru> writes:

> I took that part of code from the current `commit-msg`. And if you
> think it's unnecessary, then it's unnecessary as well in the current
> `commit-msg`.

You didn't take the awk code in commit-msg that actually uses the
at_sign and cent_sign variables, so I don't think that follows.





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Tue, 14 May 2019 22:16:01 GMT) Full text and rfc822 format available.

Message #32 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <hi-angel <at> yandex.ru>
To: Noam Postavsky <npostavs <at> gmail.com>
Cc: 35368 <at> debbugs.gnu.org
Subject: Re: bug#35368: [PATCH v2] Do potentially destructive operations in
 prepare-commit-msg
Date: Wed, 15 May 2019 01:15:38 +0300

В Вт, мая 14, 2019 at 18:09, Noam Postavsky <npostavs <at> gmail.com> 
написал:
> Konstantin Kharlamov <hi-angel <at> yandex.ru> writes:
> 
>>  I took that part of code from the current `commit-msg`. And if you
>>  think it's unnecessary, then it's unnecessary as well in the current
>>  `commit-msg`.
> 
> You didn't take the awk code in commit-msg that actually uses the
> at_sign and cent_sign variables, so I don't think that follows.

Oh, right, I see, thanks. Let me fix this…






Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Tue, 14 May 2019 22:28:02 GMT) Full text and rfc822 format available.

Message #35 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
To: 35368 <at> debbugs.gnu.org
Subject: [PATCH v3] Do potentially destructive operations in prepare-commit-msg
Date: Wed, 15 May 2019 01:26:47 +0300
* build-aux/git-hooks/prepare-commit-msg: if someone occasionally puts
Signed-off line, it will likely get there through -s option of git.
Exploit this fact to abort before a user got a chance to type commit
message.
---

v3: remove unused at_sign, cent_sign, and COMMIT_MSG_FILE awk variables

 autogen.sh                             |  4 +--
 build-aux/git-hooks/prepare-commit-msg | 43 ++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 2 deletions(-)
 create mode 100755 build-aux/git-hooks/prepare-commit-msg

diff --git a/autogen.sh b/autogen.sh
index 40d0c37b11b..a0a2ac3c689 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+ #!/bin/sh
 ### autogen.sh - tool to help build Emacs from a repository checkout
 
 ## Copyright (C) 2011-2019 Free Software Foundation, Inc.
@@ -332,7 +332,7 @@ hooks=
 tailored_hooks=
 sample_hooks=
 
-for hook in commit-msg pre-commit; do
+for hook in commit-msg pre-commit prepare-commit-msg; do
     cmp -- build-aux/git-hooks/$hook "$hooks/$hook" >/dev/null 2>&1 ||
 	tailored_hooks="$tailored_hooks $hook"
 done
diff --git a/build-aux/git-hooks/prepare-commit-msg b/build-aux/git-hooks/prepare-commit-msg
new file mode 100755
index 00000000000..961ddf38486
--- /dev/null
+++ b/build-aux/git-hooks/prepare-commit-msg
@@ -0,0 +1,43 @@
+#!/bin/sh
+# Check the format of GNU Emacs change log entries.
+
+# Copyright 2019 Free Software Foundation, Inc.
+
+# This file is part of GNU Emacs.
+
+# GNU Emacs is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# GNU Emacs is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+COMMIT_MSG_FILE=$1
+COMMIT_SOURCE=$2
+SHA1=$3
+
+# Prefer gawk if available, as it handles NUL bytes properly.
+if type gawk >/dev/null 2>&1; then
+  awk=gawk
+else
+  awk=awk
+fi
+
+exec $awk '
+  /^Signed-off-by: / {
+    print "'\''Signed-off-by:'\'' in commit message"
+    status = 1
+  }
+  END {
+    if (status != 0) {
+      print "Commit aborted; please see the file 'CONTRIBUTE'"
+    }
+    exit status
+  }
+' <"$COMMIT_MSG_FILE"
-- 
2.21.0





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Wed, 15 May 2019 17:41:02 GMT) Full text and rfc822 format available.

Message #38 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: npostavs <at> gmail.com
To: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
Cc: 35368 <at> debbugs.gnu.org
Subject: Re: bug#35368: [PATCH v3] Do potentially destructive operations in
 prepare-commit-msg
Date: Wed, 15 May 2019 13:40:36 -0400
Konstantin Kharlamov <Hi-Angel <at> yandex.ru> writes:

> * build-aux/git-hooks/prepare-commit-msg: if someone occasionally puts
> Signed-off line, it will likely get there through -s option of git.
> Exploit this fact to abort before a user got a chance to type commit
> message.

Thanks, looks good, but I think it would be helpful to explain that this
is about catching git commit -s ... in the comments of the file too.

> --- a/autogen.sh
> +++ b/autogen.sh
> @@ -1,4 +1,4 @@
> -#!/bin/sh
> + #!/bin/sh

This is a typo or something, right?





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Wed, 15 May 2019 21:27:02 GMT) Full text and rfc822 format available.

Message #41 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
To: 35368 <at> debbugs.gnu.org
Subject: [PATCH v4] Do potentially destructive operations in prepare-commit-msg
Date: Thu, 16 May 2019 00:25:53 +0300
* build-aux/git-hooks/prepare-commit-msg: if someone occasionally puts
Signed-off line, it will likely get there through -s option of git.
Exploit this fact to abort before a user got a chance to type commit
message.
---

v4: add a comment explaining how Signed-off could get there with -s
option, and remove a stray space.

 autogen.sh                             |  2 +-
 build-aux/git-hooks/prepare-commit-msg | 45 ++++++++++++++++++++++++++
 2 files changed, 46 insertions(+), 1 deletion(-)
 create mode 100755 build-aux/git-hooks/prepare-commit-msg

diff --git a/autogen.sh b/autogen.sh
index 40d0c37b11b..c85ecfecac6 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -332,7 +332,7 @@ hooks=
 tailored_hooks=
 sample_hooks=
 
-for hook in commit-msg pre-commit; do
+for hook in commit-msg pre-commit prepare-commit-msg; do
     cmp -- build-aux/git-hooks/$hook "$hooks/$hook" >/dev/null 2>&1 ||
 	tailored_hooks="$tailored_hooks $hook"
 done
diff --git a/build-aux/git-hooks/prepare-commit-msg b/build-aux/git-hooks/prepare-commit-msg
new file mode 100755
index 00000000000..97b30263412
--- /dev/null
+++ b/build-aux/git-hooks/prepare-commit-msg
@@ -0,0 +1,45 @@
+#!/bin/sh
+# Check the format of GNU Emacs change log entries.
+
+# Copyright 2019 Free Software Foundation, Inc.
+
+# This file is part of GNU Emacs.
+
+# GNU Emacs is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# GNU Emacs is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+COMMIT_MSG_FILE=$1
+COMMIT_SOURCE=$2
+SHA1=$3
+
+# Prefer gawk if available, as it handles NUL bytes properly.
+if type gawk >/dev/null 2>&1; then
+  awk=gawk
+else
+  awk=awk
+fi
+
+exec $awk '
+  # catch the case when someone ran git-commit with -s option,
+  # which automatically adds Signed-off-by
+  /^Signed-off-by: / {
+    print "'\''Signed-off-by:'\'' in commit message"
+    status = 1
+  }
+  END {
+    if (status != 0) {
+      print "Commit aborted; please see the file 'CONTRIBUTE'"
+    }
+    exit status
+  }
+' <"$COMMIT_MSG_FILE"
-- 
2.21.0





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Wed, 15 May 2019 21:30:01 GMT) Full text and rfc822 format available.

Message #44 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <hi-angel <at> yandex.ru>
To: npostavs <at> gmail.com
Cc: 35368 <at> debbugs.gnu.org
Subject: Re: bug#35368: [PATCH v3] Do potentially destructive operations in
 prepare-commit-msg
Date: Thu, 16 May 2019 00:28:58 +0300

В Ср, мая 15, 2019 at 13:40, npostavs <at> gmail.com написал:
> Konstantin Kharlamov <Hi-Angel <at> yandex.ru> writes:
> 
>>  * build-aux/git-hooks/prepare-commit-msg: if someone occasionally 
>> puts
>>  Signed-off line, it will likely get there through -s option of git.
>>  Exploit this fact to abort before a user got a chance to type commit
>>  message.
> 
> Thanks, looks good, but I think it would be helpful to explain that 
> this
> is about catching git commit -s ... in the comments of the file too.
> 
>>  --- a/autogen.sh
>>  +++ b/autogen.sh
>>  @@ -1,4 +1,4 @@
>>  -#!/bin/sh
>>  + #!/bin/sh
> 
> This is a typo or something, right?

Oh, right, sorry about that. It wasn't supposed to get into the commit. 
I was testing the hook by adding this space, and apparently it leaked 
through to my local commit.

Thanks for your comments, I resent a v4 with a comment added, and the 
stray space removed.






Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Fri, 17 May 2019 00:36:01 GMT) Full text and rfc822 format available.

Message #47 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: Noam Postavsky <npostavs <at> gmail.com>
To: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
Cc: 35368 <at> debbugs.gnu.org
Subject: Re: bug#35368: [PATCH v4] Do potentially destructive operations in
 prepare-commit-msg
Date: Thu, 16 May 2019 20:35:13 -0400
tags 35368 fixed
close 35368 
quit

Konstantin Kharlamov <Hi-Angel <at> yandex.ru> writes:

> * build-aux/git-hooks/prepare-commit-msg: if someone occasionally puts

> +  # catch the case when someone ran git-commit with -s option,

Capitalized and pushed to emacs-26.

2bdc419f51 2019-05-16T20:25:32-04:00 "Do potentially destructive operations in prepare-commit-msg"
https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=2bdc419f51630eb433deb139da67e419000c7694





Added tag(s) fixed. Request was from Noam Postavsky <npostavs <at> gmail.com> to control <at> debbugs.gnu.org. (Fri, 17 May 2019 00:36:04 GMT) Full text and rfc822 format available.

bug closed, send any further explanations to 35368 <at> debbugs.gnu.org and Konstantin Kharlamov <Hi-Angel <at> yandex.ru> Request was from Noam Postavsky <npostavs <at> gmail.com> to control <at> debbugs.gnu.org. (Fri, 17 May 2019 00:36:04 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#35368; Package emacs. (Fri, 17 May 2019 00:40:01 GMT) Full text and rfc822 format available.

Message #54 received at 35368 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <hi-angel <at> yandex.ru>
To: Noam Postavsky <npostavs <at> gmail.com>
Cc: 35368 <at> debbugs.gnu.org
Subject: Re: bug#35368: [PATCH v4] Do potentially destructive operations in
 prepare-commit-msg
Date: Fri, 17 May 2019 03:39:27 +0300
Thank you!

On Чт, May 16, 2019 at 20:35, Noam Postavsky <npostavs <at> gmail.com> 
wrote:
> tags 35368 fixed
> close 35368
> quit
> 
> Konstantin Kharlamov <Hi-Angel <at> yandex.ru> writes:
> 
>>  * build-aux/git-hooks/prepare-commit-msg: if someone occasionally 
>> puts
> 
>>  +  # catch the case when someone ran git-commit with -s option,
> 
> Capitalized and pushed to emacs-26.
> 
> 2bdc419f51 2019-05-16T20:25:32-04:00 "Do potentially destructive 
> operations in prepare-commit-msg"
> https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=2bdc419f51630eb433deb139da67e419000c7694
> 






bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 14 Jun 2019 11:24:05 GMT) Full text and rfc822 format available.

This bug report was last modified 4 years and 317 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.