aboutsummaryrefslogtreecommitdiffstats
path: root/src/unexpand.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2005-01-11 16:53:24 +0000
committerJim Meyering <jim@meyering.net>2005-01-11 16:53:24 +0000
commitc2fed1cc190243e79f4b52c8f6de3f67ec1936e3 (patch)
tree914fdca725a673b601a8b8bb1557899c4b3fb651 /src/unexpand.c
parent(add_tab_stop): Properly diagnose a tabstop list with decreasing values. (diff)
downloadcoreutils-c2fed1cc190243e79f4b52c8f6de3f67ec1936e3.tar.gz
coreutils-c2fed1cc190243e79f4b52c8f6de3f67ec1936e3.zip
(main): Check for overflow in tabstop values
specified via the obsolete form. E.g., now this command fails: _POSIX2_VERSION=1 ./unexpand -$(echo '2^64+1'|bc) Before it would act like `_POSIX2_VERSION=1 ./unexpand -1'.
Diffstat (limited to 'src/unexpand.c')
-rw-r--r--src/unexpand.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/unexpand.c b/src/unexpand.c
index 1341e437c..60a3f1d61 100644
--- a/src/unexpand.c
+++ b/src/unexpand.c
@@ -518,7 +518,12 @@ main (int argc, char **argv)
tabval = 0;
have_tabval = true;
}
- tabval = tabval * 10 + c - '0';
+ {
+ uintmax_t new_t = tabval * 10 + c - '0';
+ if (UINTMAX_MAX / 10 < tabval || new_t < tabval * 10)
+ error (EXIT_FAILURE, 0, _("tab stop value is too large"));
+ tabval = new_t;
+ }
obsolete_tablist = true;
break;
}