On Wed, Apr 3, 2013 at 8:36 AM, Andrew Gregory <andrew.gregory.8@gmail.com>wrote:
On Wed, Apr 3, 2013 at 7:48 AM, Andrew Gregory <andrew.gregory.8@gmail.com>wrote:
On 04/03/13 at 07:14am, Dave Reisner wrote:
On Tue, Apr 2, 2013 at 7:57 PM, Andrew Gregory <andrew.gregory.8@gmail.com>wrote:
strtol already ignores leading whitespace so it doesn't make much sense for us to worry about trailing whitespace.
What is this actually fixing? The only place we call parseindex from makes gratuitous use of both strtok_r (which compresses empty fields -- in
On 04/03/13 at 08:25am, Dave Reisner wrote: this
case, whitespace and commas), and strtrim's input. Is there actually a reproducible case where trailing whitespace (or leading, for that matter) can be passed to parseindex?
strtok_r only handles spaces and only the full range is trimmed, not the individual numbers. So "1- 2" is valid input, but "1 -2" is not (those are tabs not spaces).
No, neither of these are valid. Ranges must be x-y without any containing space.
Enter a selection (default=all): 1- 2 error: invalid value: 0 is not between 1 and 23
Enter a selection (default=all): 1 -2 error: invalid value: -2 is not between 1 and 23
Enter a selection (default=all): 1 - 3 error: invalid number: -
Tabs, not spaces. "1-\t2" is currently valid input.
Eh, right. This is weird.
Why don't we simply fix the strtok_r call to handle more of what's generally considered to be whitespace?
Works for me, I just chose the route that didn't invalidate input that works now.
We don't document that this is acceptable. We're rather terse in the language that we use to describe the accepted input: Sequential packages may be selected by specifying the first and last package numbers separated by a hyphen (-) So I don't think that changing the strtok_r delimiters would be breaking any user contract.
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com> --- src/pacman/util.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/src/pacman/util.c b/src/pacman/util.c index 7b7dace..115f328 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -1292,6 +1292,10 @@ static int parseindex(char *s, int *val, int
min,
int max) { char *endptr = NULL; int n = strtol(s, &endptr, 10); + /* strtol skips leading whitespace, don't worry about
trailing
whitespace */ + while(isspace(*endptr)) { + endptr++; + } if(*endptr == '\0') { if(n < min || n > max) { pm_printf(ALPM_LOG_ERROR, -- 1.8.2