Portability of strtod (was Re: pgsql: Include GUC's unit, if it has one, in out-of-range error message)

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Michael Paquier <michael(at)paquier(dot)xyz>
Cc: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Portability of strtod (was Re: pgsql: Include GUC's unit, if it has one, in out-of-range error message)
Date: 2019-03-11 03:15:40
Message-ID: 30864.1552274140@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers

Michael Paquier <michael(at)paquier(dot)xyz> writes:
> On Sun, Mar 10, 2019 at 07:18:20PM +0000, Tom Lane wrote:
>> Include GUC's unit, if it has one, in out-of-range error messages.

> It does not seem to have cooled down all animals yet, whelk is
> still complaining:
> https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=whelk&dt=2019-03-11%2000%3A41%3A13

Yeah, also the HPUX animals (gaur isn't booted up at the moment, but
I bet it'd fail too).

I think what's going on here is what's mentioned in the comments in
float8in_internal:

* C99 requires that strtod() accept NaN, [+-]Infinity, and [+-]Inf,
* but not all platforms support all of these (and some accept them
* but set ERANGE anyway...)

Specifically, these symptoms would be explained if these platforms'
strtod() sets ERANGE for infinity.

I can think of three plausible responses. In decreasing order of
amount of work:

1. Decide that we'd better wrap strtod() with something that ensures
platform-independent behavior for all our uses of strtod (and strtof?)
rather than only float8in_internal.

2. Put in a hack in guc.c to make it ignore ERANGE as long as the result
satisfies isinf(). This would ensure GUC cases would go through the
value-out-of-range path rather than the syntax-error path. We've got
a bunch of other strtod() calls that are potentially subject to similar
platform dependencies though ...

3. Decide this isn't worth avoiding platform dependencies for, and just
take out the new regression test case. I'd only put in that test on
the spur of the moment anyway, so it's hard to argue that it's worth
much.

Thoughts?

regards, tom lane

In response to

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Amit Kapila 2019-03-11 03:54:28 Re: Portability of strtod (was Re: pgsql: Include GUC's unit, if it has one, in out-of-range error message)
Previous Message Amit Kapila 2019-03-11 02:51:21 Re: pgsql: tableam: introduce table AM infrastructure.

Browse pgsql-hackers by date

  From Date Subject
Next Message David Rowley 2019-03-11 03:30:31 Re: using index or check in ALTER TABLE SET NOT NULL
Previous Message Tomas Vondra 2019-03-11 02:59:33 Re: [HACKERS] PATCH: multivariate histograms and MCV lists