[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
FYI: don't let pr treat +1:-1 like +1:18446744073709551615
From: |
Jim Meyering |
Subject: |
FYI: don't let pr treat +1:-1 like +1:18446744073709551615 |
Date: |
Fri, 01 Apr 2005 09:44:17 +0200 |
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 <address@hidden>
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],
);
#']]);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- FYI: don't let pr treat +1:-1 like +1:18446744073709551615,
Jim Meyering <=