Fix inappropriate uses of atol()
authorPeter Eisentraut <peter@eisentraut.org>
Sat, 10 Aug 2024 06:12:44 +0000 (08:12 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Sat, 10 Aug 2024 06:22:31 +0000 (08:22 +0200)
commitf5a1311fccd2ed24a9fb42aa47a17d1df7126039
tree9bc268b94cdcbd9ffb882057117a8abb136f68ea
parent7adec2d5fc29036a6ce78c4f4e95f85466cb5d9a
Fix inappropriate uses of atol()

Some code using atol() would not work correctly if sizeof(long)==4:

- src/bin/pg_basebackup/pg_basebackup.c: Would miscount size of a
  tablespace over 2 TB.

- src/bin/pg_basebackup/streamutil.c: Would truncate a timeline ID
  beyond INT32_MAX.

- src/bin/pg_rewind/libpq_source.c: Would miscount size of files
  larger than 2 GB (but this currently cannot happen).

Replace these with atoll().

In one case, the use of atol() did not result in incorrect behavior
but seems inconsistent with related code:

- src/interfaces/ecpg/ecpglib/execute.c: Gratuitous, since it
  processes a value from pg_type.typlen, which is int16.

Replace this with atoi().

Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi>
Discussion: https://www.postgresql.org/message-id/flat/a52738ad-06bc-4d45-b59f-b38a8a89de49%40eisentraut.org
src/bin/pg_basebackup/pg_basebackup.c
src/bin/pg_basebackup/streamutil.c
src/bin/pg_rewind/libpq_source.c
src/interfaces/ecpg/ecpglib/execute.c