[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 03/10] src/: Remove redundant checks after strtol(3).
From: |
Alejandro Colomar |
Subject: |
[PATCH v5 03/10] src/: Remove redundant checks after strtol(3). |
Date: |
Sat, 16 Mar 2024 13:34:43 +0100 |
`str == end` can only happen if strtol(3) returns 0.
Fixes: 351da0dcdf70 ("groff before CVS: release 1.02")
Fixes: d21a9dbc7a83 ("* src/devices/grolbp/lbp.cc: (long_options): Add
-w/--linewidth option.")
Fixes: dc5351364982 ("groff before CVS: release 1.10")
Link: <https://savannah.gnu.org/bugs/?65451>
Cc: "G. Branden Robinson" <branden@debian.org>
Cc: Dave Kemper <saint.snit@gmail.com>
Cc: "James K. Lowden" <jklowden@schemamania.org>
Cc: Colin Watson <cjwatson@debian.org>
Cc: Werner LEMBERG <wl@gnu.org>
Cc: James Clark <jjc@jclark.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
---
src/devices/grodvi/dvi.cpp | 4 ++--
src/devices/grolbp/lbp.cpp | 2 +-
src/devices/grolj4/lj4.cpp | 6 +++---
src/devices/grops/ps.cpp | 4 ++--
src/devices/grops/psrm.cpp | 2 +-
src/libs/libgroff/font.cpp | 2 +-
src/preproc/eqn/lex.cpp | 2 +-
src/preproc/pic/tex.cpp | 2 +-
src/preproc/refer/command.cpp | 3 +--
src/preproc/refer/ref.cpp | 2 +-
src/preproc/refer/refer.cpp | 6 +++---
src/utils/indxbib/indxbib.cpp | 2 +-
src/utils/lkbib/lkbib.cpp | 2 +-
src/utils/lookbib/lookbib.cpp | 2 +-
src/utils/tfmtodit/tfmtodit.cpp | 5 +----
15 files changed, 21 insertions(+), 25 deletions(-)
diff --git a/src/devices/grodvi/dvi.cpp b/src/devices/grodvi/dvi.cpp
index 6bdeaa6eb..45d585b63 100644
--- a/src/devices/grodvi/dvi.cpp
+++ b/src/devices/grodvi/dvi.cpp
@@ -92,7 +92,7 @@ void dvi_font::handle_unknown_font_command(const char
*command,
fatal_with_file_and_line(filename, lineno,
"'checksum' command requires an argument");
checksum = int(strtol(arg, &ptr, 10));
- if (checksum == 0 && ptr == arg) {
+ if (ptr == arg) {
fatal_with_file_and_line(filename, lineno, "bad checksum");
}
}
@@ -101,7 +101,7 @@ void dvi_font::handle_unknown_font_command(const char
*command,
fatal_with_file_and_line(filename, lineno,
"'designsize' command requires an argument");
design_size = int(strtol(arg, &ptr, 10));
- if (design_size == 0 && ptr == arg) {
+ if (ptr == arg) {
fatal_with_file_and_line(filename, lineno, "bad design size");
}
}
diff --git a/src/devices/grolbp/lbp.cpp b/src/devices/grolbp/lbp.cpp
index c27e09709..63077f16e 100644
--- a/src/devices/grolbp/lbp.cpp
+++ b/src/devices/grolbp/lbp.cpp
@@ -708,7 +708,7 @@ int main(int argc, char **argv)
{
char *ptr;
long n = strtol(optarg, &ptr, 10);
- if (n == 0 && ptr == optarg)
+ if (ptr == optarg)
error("argument for -w must be a non-negative integer");
else if (n < 0 || n > INT_MAX)
error("out of range argument for -w");
diff --git a/src/devices/grolj4/lj4.cpp b/src/devices/grolj4/lj4.cpp
index 507e3ac09..ce9de79df 100644
--- a/src/devices/grolj4/lj4.cpp
+++ b/src/devices/grolj4/lj4.cpp
@@ -140,7 +140,7 @@ void lj4_font::handle_unknown_font_command(const char
*command,
command);
char *ptr;
long n = strtol(arg, &ptr, 10);
- if (n == 0 && ptr == arg)
+ if (ptr == arg)
fatal_with_file_and_line(filename, lineno,
"'%1' command requires numeric argument",
command);
@@ -662,7 +662,7 @@ int main(int argc, char **argv)
{
char *ptr;
long n = strtol(optarg, &ptr, 10);
- if (n == 0 && ptr == optarg)
+ if (ptr == optarg)
error("argument for -c must be a positive integer");
else if (n <= 0 || n > 32767)
error("out of range argument for -c");
@@ -674,7 +674,7 @@ int main(int argc, char **argv)
{
char *ptr;
long n = strtol(optarg, &ptr, 10);
- if (n == 0 && ptr == optarg)
+ if (ptr == optarg)
error("argument for -w must be a non-negative integer");
else if (n < 0 || n > INT_MAX)
error("out of range argument for -w");
diff --git a/src/devices/grops/ps.cpp b/src/devices/grops/ps.cpp
index 4e6f415da..f553f0f61 100644
--- a/src/devices/grops/ps.cpp
+++ b/src/devices/grops/ps.cpp
@@ -1663,7 +1663,7 @@ void ps_printer::do_mdef(char *arg, const environment *)
{
char *p;
int n = (int)strtol(arg, &p, 10);
- if (n == 0 && p == arg) {
+ if (p == arg) {
error("first argument to X mdef must be an integer");
return;
}
@@ -1697,7 +1697,7 @@ void ps_printer::do_import(char *arg, const environment
*env)
while (nparms < 6) {
char *end;
long n = strtol(p, &end, 10);
- if (n == 0 && end == p)
+ if (end == p)
break;
parms[nparms++] = int(n);
p = end;
diff --git a/src/devices/grops/psrm.cpp b/src/devices/grops/psrm.cpp
index f793bd45f..5d3905761 100644
--- a/src/devices/grops/psrm.cpp
+++ b/src/devices/grops/psrm.cpp
@@ -110,7 +110,7 @@ static int read_uint_arg(const char **pp, unsigned *res)
const char *start = *pp;
// XXX use strtoul
long n = strtol(start, (char **)pp, 10);
- if (n == 0 && *pp == start) {
+ if (*pp == start) {
error("not an integer");
return 0;
}
diff --git a/src/libs/libgroff/font.cpp b/src/libs/libgroff/font.cpp
index d19f3d0ca..e5d834998 100644
--- a/src/libs/libgroff/font.cpp
+++ b/src/libs/libgroff/font.cpp
@@ -988,7 +988,7 @@ bool font::load(bool load_header_only)
}
char *ptr;
metric.code = (int)strtol(p, &ptr, 0);
- if (metric.code == 0 && ptr == p) {
+ if (ptr == p) {
t.error("invalid code '%1' for character '%2'", p, nm);
return false;
}
diff --git a/src/preproc/eqn/lex.cpp b/src/preproc/eqn/lex.cpp
index 03fb753e7..eec664e6f 100644
--- a/src/preproc/eqn/lex.cpp
+++ b/src/preproc/eqn/lex.cpp
@@ -1060,7 +1060,7 @@ void do_space()
token_buffer += '\0';
char *ptr;
long n = strtol(token_buffer.contents(), &ptr, 10);
- if (n == 0 && ptr == token_buffer.contents())
+ if (ptr == token_buffer.contents())
lex_error("invalid argument '%1' to space primitive",
token_buffer.contents());
else
diff --git a/src/preproc/pic/tex.cpp b/src/preproc/pic/tex.cpp
index c6071af36..0b7a03d6c 100644
--- a/src/preproc/pic/tex.cpp
+++ b/src/preproc/pic/tex.cpp
@@ -426,7 +426,7 @@ void tpic_output::command(const char *s, const char
*filename, int lineno)
else {
char *ptr;
int temp = (int)strtol(p, &ptr, 10);
- if (temp == 0 && ptr == p)
+ if (ptr == p)
error_with_file_and_line(filename, lineno,
"argument to '.ps' not an integer");
else if (temp < 0)
diff --git a/src/preproc/refer/command.cpp b/src/preproc/refer/command.cpp
index b49e2be6f..56957c951 100644
--- a/src/preproc/refer/command.cpp
+++ b/src/preproc/refer/command.cpp
@@ -708,8 +708,7 @@ static int check_args(const char *types, const char *name,
{
char *ptr;
long n = strtol(argv->s, &ptr, 10);
- if ((n == 0 && ptr == argv->s)
- || *ptr != '\0') {
+ if (ptr == argv->s || *ptr != '\0') {
input_stack::error("argument %1 for command '%2' must be an integer",
argno + 1, name);
return 0;
diff --git a/src/preproc/refer/ref.cpp b/src/preproc/refer/ref.cpp
index 80c63d7bd..5f6d5c63a 100644
--- a/src/preproc/refer/ref.cpp
+++ b/src/preproc/refer/ref.cpp
@@ -432,7 +432,7 @@ void reference::compute_sort_key()
else if (csdigit(*sf)) {
char *ptr;
long l = strtol(sf, &ptr, 10);
- if (l == 0 && ptr == sf)
+ if (ptr == sf)
;
else {
sf = ptr;
diff --git a/src/preproc/refer/refer.cpp b/src/preproc/refer/refer.cpp
index a5c291e3e..3f441a438 100644
--- a/src/preproc/refer/refer.cpp
+++ b/src/preproc/refer/refer.cpp
@@ -258,7 +258,7 @@ int main(int argc, char **argv)
if (*++opt != '\0' && *opt != ',') {
char *ptr;
long n = strtol(opt, &ptr, 10);
- if (n == 0 && ptr == opt) {
+ if (ptr == opt) {
error("invalid integer '%1' in 'l' option argument", opt);
opt = 0;
break;
@@ -274,7 +274,7 @@ int main(int argc, char **argv)
if (*opt != '\0') {
char *ptr;
long n = strtol(opt, &ptr, 10);
- if (n == 0 && ptr == opt) {
+ if (ptr == opt) {
error("invalid integer '%1' in 'l' option argument", opt);
opt = 0;
break;
@@ -330,7 +330,7 @@ int main(int argc, char **argv)
{
char *ptr;
long n = strtol(opt, &ptr, 10);
- if (n == 0 && ptr == opt) {
+ if (ptr == opt) {
error("invalid integer '%1' in 't' option argument", opt);
opt = 0;
break;
diff --git a/src/utils/indxbib/indxbib.cpp b/src/utils/indxbib/indxbib.cpp
index dab501718..a3ac8eb6e 100644
--- a/src/utils/indxbib/indxbib.cpp
+++ b/src/utils/indxbib/indxbib.cpp
@@ -346,7 +346,7 @@ static void check_integer_arg(char opt, const char *arg,
int min, int *res)
if (ERANGE == errno)
fatal("argument to -%1 must be between %2 and %3", arg, min,
INT_MAX);
- else if (n == 0 && ptr == arg)
+ else if (ptr == arg)
fatal("argument to -%1 not an integer", opt);
else if (n < min)
fatal("argument to -%1 must not be less than %2", opt, min);
diff --git a/src/utils/lkbib/lkbib.cpp b/src/utils/lkbib/lkbib.cpp
index 7bdf6cc24..8eb5195b7 100644
--- a/src/utils/lkbib/lkbib.cpp
+++ b/src/utils/lkbib/lkbib.cpp
@@ -73,7 +73,7 @@ int main(int argc, char **argv)
{
char *ptr;
long n = strtol(optarg, &ptr, 10);
- if (n == 0 && ptr == optarg) {
+ if (ptr == optarg) {
error("bad integer '%1' in 't' option", optarg);
break;
}
diff --git a/src/utils/lookbib/lookbib.cpp b/src/utils/lookbib/lookbib.cpp
index 6469b313b..6071e6e5c 100644
--- a/src/utils/lookbib/lookbib.cpp
+++ b/src/utils/lookbib/lookbib.cpp
@@ -71,7 +71,7 @@ int main(int argc, char **argv)
{
char *ptr;
long n = strtol(optarg, &ptr, 10);
- if (n == 0 && ptr == optarg) {
+ if (ptr == optarg) {
error("bad integer '%1' in 't' option", optarg);
break;
}
diff --git a/src/utils/tfmtodit/tfmtodit.cpp b/src/utils/tfmtodit/tfmtodit.cpp
index b5967963d..2d259b057 100644
--- a/src/utils/tfmtodit/tfmtodit.cpp
+++ b/src/utils/tfmtodit/tfmtodit.cpp
@@ -713,10 +713,7 @@ int main(int argc, char **argv)
{
char *ptr;
long n = strtol(optarg, &ptr, 0);
- if ((n == 0 && ptr == optarg)
- || *ptr != '\0'
- || n < 0
- || n > UCHAR_MAX)
+ if (ptr == optarg || *ptr != '\0' || n < 0 || n > UCHAR_MAX)
error("invalid skew character position '%1'", optarg);
else
skewchar = (int)n;
--
2.43.0
signature.asc
Description: PGP signature
- [PATCH v4 05/10] src/: ceil_prime(): Add function to get the lowest prime not less than n, (continued)
- [PATCH v4 05/10] src/: ceil_prime(): Add function to get the lowest prime not less than n, Alejandro Colomar, 2024/03/16
- [PATCH v4 06/10] [indxbib]: Don't else after [[noreturn]], Alejandro Colomar, 2024/03/16
- [PATCH v4 07/10] [indxbib]: Clear errno before calling strtol(3), Alejandro Colomar, 2024/03/16
- [PATCH v4 10/10] [grolbp]: Fix range check after strtol(3), Alejandro Colomar, 2024/03/16
- Re: [PATCH v4 10/10] [grolbp]: Fix range check after strtol(3), Alejandro Colomar, 2024/03/16
- [PATCH v4 08/10] [indxbib]: Remove dead code, Alejandro Colomar, 2024/03/16
- [PATCH v4 09/10] [indxbib]: Collapse related tests, Alejandro Colomar, 2024/03/16
- [PATCH v5 00/10] strtol(3)-related fixes, Alejandro Colomar, 2024/03/16
- [PATCH v5 01/10] [libgroff]: Remove redundant checks., Alejandro Colomar, 2024/03/16
- [PATCH v5 02/10] [libgroff]: Remove dead code, Alejandro Colomar, 2024/03/16
- [PATCH v5 03/10] src/: Remove redundant checks after strtol(3).,
Alejandro Colomar <=
- [PATCH v5 04/10] [grolbp]: Remove bogus (and redundant) check, Alejandro Colomar, 2024/03/16
- [PATCH v5 05/10] src/: ceil_prime(): Add function to get the lowest prime not less than n, Alejandro Colomar, 2024/03/16
- [PATCH v5 06/10] [indxbib]: Don't else after [[noreturn]], Alejandro Colomar, 2024/03/16
- [PATCH v5 07/10] [indxbib]: Clear errno before calling strtol(3), Alejandro Colomar, 2024/03/16
- [PATCH v5 08/10] [indxbib]: Remove dead code, Alejandro Colomar, 2024/03/16
- [PATCH v5 09/10] [indxbib]: Collapse related tests, Alejandro Colomar, 2024/03/16
- [PATCH v5 10/10] [grolbp]: Fix range check after strtol(3), Alejandro Colomar, 2024/03/16
[PATCH v3 5/9] src/: ceil_prime(): Add function to get the lowest prime not smaller than n, Alejandro Colomar, 2024/03/15
[PATCH v3 1/9] [libgroff]: Remove redundant checks., Alejandro Colomar, 2024/03/15
[PATCH v3 7/9] [indxbib]: Clear errno before calling strtol(3), Alejandro Colomar, 2024/03/15