summaryrefslogtreecommitdiff
path: root/Src/builtin.c
diff options
context:
space:
mode:
authorBarton E. Schaefer <schaefer@zsh.org>2014-10-10 23:12:57 -0700
committerBarton E. Schaefer <schaefer@zsh.org>2014-10-10 23:12:57 -0700
commit605a73e415772a1d74cff39212618c8f1d58297b (patch)
treee40ef7beca0b554d2b968a2fa15f2552833c80d0 /Src/builtin.c
parent22c4ea424ce2e8febce04d324c5ec9898f5d534b (diff)
downloadzsh-605a73e415772a1d74cff39212618c8f1d58297b.tar.gz
zsh-605a73e415772a1d74cff39212618c8f1d58297b.zip
33429: disallow non-integer values for HISTSIZE and SAVEHIST of "fc -p", and fix crash on zero values for same
Diffstat (limited to 'Src/builtin.c')
-rw-r--r--Src/builtin.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/Src/builtin.c b/Src/builtin.c
index 4a10c7dd1..5b711edc0 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -1363,10 +1363,19 @@ bin_fc(char *nam, char **argv, Options ops, int func)
if (*argv) {
hf = *argv++;
if (*argv) {
- hs = zstrtol(*argv++, NULL, 10);
- if (*argv)
- shs = zstrtol(*argv++, NULL, 10);
- else
+ char *check;
+ hs = zstrtol(*argv++, &check, 10);
+ if (*check) {
+ zwarnnam("fc", "HISTSIZE must be an integer");
+ return 1;
+ }
+ if (*argv) {
+ shs = zstrtol(*argv++, &check, 10);
+ if (*check) {
+ zwarnnam("fc", "SAVEHIST must be an integer");
+ return 1;
+ }
+ } else
shs = hs;
if (*argv) {
zwarnnam("fc", "too many arguments");