changeset 17262:aa1920a5636c

update-copyright: avoid copyright notice date corruption Given a sequence of copyright year numbers in which the final one was a two-digit number that happened to be a substring of a preceding four-digit year number, we would mistakenly update the substring (from two- to four-digit) rather than the two-digit number at the end, which, combined with the addition of the current 4-digit year number would yield two 5-digit year numbers, e.g., here, it would convert the first "99" to "1999, 2013" rather than the final one: 1991, 99 11999, 20131, 1999 * build-aux/update-copyright: Tighten a regexp. * tests/test-update-copyright.sh: Add a test case to trigger the bug. Reported by Joseph Myers in http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/32281
author Jim Meyering <jim@meyering.net>
date Thu, 03 Jan 2013 10:23:30 +0100
parents 28b073aabf32
children 283c189edcab
files ChangeLog build-aux/update-copyright tests/test-update-copyright.sh
diffstat 3 files changed, 26 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2013-01-03  Jim Meyering  <jim@meyering.net>
+
+	update-copyright: avoid copyright notice date corruption
+	Given a sequence of copyright year numbers in which the final
+	one was a two-digit number that happened to be a substring of
+	a preceding four-digit year number, we would mistakenly update
+	the substring (from two- to four-digit) rather than the two-digit
+	number at the end, which, combined with the addition of the current
+	4-digit year number would yield two 5-digit year numbers, e.g.,
+	here, it would convert the first "99" to "1999, 2013" rather than
+	the final one:
+	  1991, 99
+	  11999, 20131, 1999
+	* build-aux/update-copyright: Tighten a regexp.
+	* tests/test-update-copyright.sh: Add a test case to trigger the bug.
+	Reported by Joseph Myers in
+	http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/32281
+
 2013-01-01  Paul Eggert  <eggert@cs.ucla.edu>
 
 	regex: omit needless signed-pointer casts
--- a/build-aux/update-copyright
+++ b/build-aux/update-copyright
@@ -3,7 +3,7 @@
     if 0;
 # Update an FSF copyright year list to include the current year.
 
-my $VERSION = '2012-02-05.21:39'; # UTC
+my $VERSION = '2013-01-03.09:41'; # UTC
 
 # Copyright (C) 2009-2013 Free Software Foundation, Inc.
 #
@@ -192,7 +192,7 @@
     if ($final_year != $this_year)
       {
         # Update the year.
-        $stmt =~ s/$final_year_orig/$final_year, $this_year/;
+        $stmt =~ s/\b$final_year_orig\b/$final_year, $this_year/;
       }
     if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'})
       {
--- a/tests/test-update-copyright.sh
+++ b/tests/test-update-copyright.sh
@@ -505,6 +505,9 @@
  /* Copyright 1987, 1988, 1991, 1992 Free Software Foundation, Inc. ***
     * End of comments. */
 EOF
+cat > $TMP.two-digit-final-is-substr-of-first <<EOF
+ /* Copyright 1991, 99 Free Software Foundation, Inc. */
+EOF
 UPDATE_COPYRIGHT_YEAR=2010 \
   update-copyright $TMP.* 1> $TMP-stdout 2> $TMP-stderr
 compare /dev/null $TMP-stdout || exit 1
@@ -536,6 +539,9 @@
     Inc. ***
     * End of comments. */
 EOF
+compare - $TMP.two-digit-final-is-substr-of-first <<EOF || exit 1
+ /* Copyright 1991, 1999, 2010 Free Software Foundation, Inc. */
+EOF
 rm $TMP*
 
 exit 0