I was surprised to see that pr didn't reject as invalid a negative page number. I've checked this in:
2005-04-01 Jim Meyering <[EMAIL PROTECTED]> Don't let pr treat +1:-1 like +1:18446744073709551615. * src/pr.c (strtoumax): Remove declaration. (first_last_page): Use xstrtoumax in place of strtoumax, so we don't interpret a negative page number (e.g., in an option like --pages=1:-1) as valid. * tests/pr/Test.pm (neg-page): Add a test for this. Index: src/pr.c =================================================================== RCS file: /fetish/cu/src/pr.c,v retrieving revision 1.136 diff -u -p -r1.136 pr.c --- src/pr.c 28 Mar 2005 19:29:54 -0000 1.136 +++ src/pr.c 1 Apr 2005 07:39:07 -0000 @@ -324,10 +324,6 @@ #include "timespec.h" #include "xstrtol.h" -#if ! (HAVE_DECL_STRTOUMAX || defined strtoumax) -uintmax_t strtoumax (); -#endif - /* The official name of this program (e.g., no `g' prefix). */ #define PROGRAM_NAME "pr" @@ -806,20 +802,19 @@ first_last_page (char const *pages) char *p; uintmax_t first; uintmax_t last = UINTMAX_MAX; - int err; + strtol_error err = xstrtoumax (pages, &p, 10, &first, ""); + if (err != LONGINT_OK && err != LONGINT_INVALID_SUFFIX_CHAR) + _STRTOL_ERROR (EXIT_FAILURE, pages, _("page range"), err); - errno = 0; - first = strtoumax (pages, &p, 10); - err = errno; if (p == pages || !first) return false; if (*p == ':') { char const *p1 = p + 1; - errno = 0; - last = strtoumax (p1, &p, 10); - err |= errno; + err = xstrtoumax (p1, &p, 10, &last, ""); + if (err != LONGINT_OK) + _STRTOL_ERROR (EXIT_FAILURE, pages, _("page range"), err); if (p1 == p || last < first) return false; } @@ -827,9 +822,6 @@ first_last_page (char const *pages) if (*p) return false; - if (err) - error (EXIT_FAILURE, err, _("Page range `%s'"), pages); - first_page_number = first; last_page_number = last; return true; Index: tests/pr/Test.pm =================================================================== RCS file: /fetish/cu/tests/pr/Test.pm,v retrieving revision 1.19 retrieving revision 1.20 diff -u -p -u -r1.19 -r1.20 --- tests/pr/Test.pm 15 Mar 2005 18:09:05 -0000 1.19 +++ tests/pr/Test.pm 1 Apr 2005 07:40:33 -0000 1.20 @@ -355,6 +355,10 @@ my @tv = ( # Make sure these fail. ['col-0', '-0', '', '', 1], ['col-inval', '-'.'9'x100, '', '', 1], + +# Before coreutils-5.3.1, --pages=1:-1 would be treated like +# --pages=1:18446744073709551615. +['neg-page', '--pages=1:-1', '', '', 1], ); #']]); _______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils