strtoint(), via strtol(), would skip leading whitespaces but the same
rule was not applied for trailing whitespaces, leading to an
inconsistent behavior. Some tests are changed to cover more this area.
Author: Michael Paquier
Reviewed-by: Kyotaro Horiguchi
Discussion: https://postgr.es/m/
[email protected]
$primary->psql('postgres',
'INSERT INTO test_table VALUES (generate_series(100,200));');
+ # Note the trailing whitespace after the value of --compress, that is
+ # a valid value.
$primary->command_ok(
[
'pg_receivewal', '-D', $stream_dir, '--verbose',
- '--endpos', $nextlsn, '--compress', '1'
+ '--endpos', $nextlsn, '--compress', '1 '
],
"streaming some WAL using ZLIB compression");
qr/\Qpg_dump: error: parallel backup only supported by the directory format\E/,
'pg_dump: parallel backup only supported by the directory format');
+# Note the trailing whitespace for the value of --jobs, that is valid.
command_fails_like(
- [ 'pg_dump', '-j', '-1' ],
+ [ 'pg_dump', '-j', '-1 ' ],
qr/\Qpg_dump: error: -j\/--jobs must be in range\E/,
'pg_dump: -j/--jobs must be in range');
errno = 0;
val = strtoint(optarg, &endptr, 10);
- if (*endptr)
+ /*
+ * Skip any trailing whitespace; if anything but whitespace remains before
+ * the terminating character, fail.
+ */
+ while (*endptr != '\0' && isspace((unsigned char) *endptr))
+ endptr++;
+
+ if (*endptr != '\0')
{
pg_log_error("invalid value \"%s\" for option %s",
optarg, optname);