From 2d39fc9f7e039351daa3d6aead1538ac29258add Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sun, 4 Oct 2020 03:04:02 +0000 Subject: [PATCH] upstream: Allow full range of UIDs and GIDs for sftp chown and chgrp on 32bit platforms instead of being limited by LONG_MAX. bz#3206, found by booking00 at sina.cn, ok markus@ OpenBSD-Commit-ID: 373b7bbf1f15ae482d39567ce30d18b51c9229b5 --- sftp.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sftp.c b/sftp.c index c88c86118..e09307b1a 100644 --- a/sftp.c +++ b/sftp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.201 2020/08/03 02:43:41 djm Exp $ */ +/* $OpenBSD: sftp.c,v 1.202 2020/10/04 03:04:02 dtucker Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -1330,7 +1330,7 @@ parse_args(const char **cpp, int *ignore_errors, int *disable_echo, int *aflag, const char *cmd, *cp = *cpp; char *cp2, **argv; int base = 0; - long l; + long long ll; int path1_mandatory = 0, i, cmdnum, optidx, argc; /* Skip leading whitespace */ @@ -1488,16 +1488,16 @@ parse_args(const char **cpp, int *ignore_errors, int *disable_echo, int *aflag, if (argc - optidx < 1) goto need_num_arg; errno = 0; - l = strtol(argv[optidx], &cp2, base); + ll = strtoll(argv[optidx], &cp2, base); if (cp2 == argv[optidx] || *cp2 != '\0' || - ((l == LONG_MIN || l == LONG_MAX) && errno == ERANGE) || - l < 0) { + ((ll == LLONG_MIN || ll == LLONG_MAX) && errno == ERANGE) || + ll < 0 || ll > UINT32_MAX) { need_num_arg: error("You must supply a numeric argument " "to the %s command.", cmd); return -1; } - *n_arg = l; + *n_arg = ll; if (cmdnum == I_LUMASK) break; /* Get pathname (mandatory) */