Chet Ramey <[EMAIL PROTECTED]> wrote:
> [EMAIL PROTECTED] wrote:
>> Is this a bug?
>> 
>>>> $ t=test #bash builtin
>>>> $ $t -t ' '; echo $?
>>>> 0
>
> Doesn't look like it:

I think it is a bug, but libc may or may not hide it, depending on the
strtol[l] implementation.  SUS says:

# If the subject sequence is empty or does not have the expected form,
# no conversion is performed; the value of str is stored in the object
# pointed to by endptr, provided that endptr is not a null pointer.
...
# If no conversion could be performed, 0 shall be returned and errno may
# be set to [EINVAL].

Note it says "errno may be set", not "shall".  bash seems to assume
"shall" in legal_number() in general.c:

  errno = 0;
  value = strtoimax (string, &ep, 10);
  if (errno)
    return 0;   /* errno is set on overflow or underflow */

I think the test should be:
  if (errno || ep == string)

This should be reliable, according to SUS:
# If the subject sequence is empty or does not have the expected form,
# no conversion is performed; the value of str is stored in the object
# pointed to by endptr, provided that endptr is not a null pointer.


paul


Reply via email to