Skip to content

Commit f5a1311

Browse files
committed
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
1 parent 7adec2d commit f5a1311

File tree

4 files changed

+4
-4
lines changed

4 files changed

+4
-4
lines changed

src/bin/pg_basebackup/pg_basebackup.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2056,7 +2056,7 @@ BaseBackup(char *compression_algorithm, char *compression_detail,
20562056
tablespacecount = PQntuples(res);
20572057
for (i = 0; i < PQntuples(res); i++)
20582058
{
2059-
totalsize_kb += atol(PQgetvalue(res, i, 2));
2059+
totalsize_kb += atoll(PQgetvalue(res, i, 2));
20602060

20612061
/*
20622062
* Verify tablespace directories are empty. Don't bother with the

src/bin/pg_basebackup/streamutil.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ GetSlotInformation(PGconn *conn, const char *slot_name,
631631

632632
/* current TLI */
633633
if (!PQgetisnull(res, 0, 2))
634-
tli_loc = (TimeLineID) atol(PQgetvalue(res, 0, 2));
634+
tli_loc = (TimeLineID) atoll(PQgetvalue(res, 0, 2));
635635

636636
PQclear(res);
637637

src/bin/pg_rewind/libpq_source.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ libpq_traverse_files(rewind_source *source, process_file_callback_t callback)
294294
}
295295

296296
path = PQgetvalue(res, i, 0);
297-
filesize = atol(PQgetvalue(res, i, 1));
297+
filesize = atoll(PQgetvalue(res, i, 1));
298298
isdir = (strcmp(PQgetvalue(res, i, 2), "t") == 0);
299299
link_target = PQgetvalue(res, i, 3);
300300

src/interfaces/ecpg/ecpglib/execute.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ ecpg_is_type_an_array(int type, const struct statement *stmt, const struct varia
278278
isarray = ECPG_ARRAY_NONE;
279279
else
280280
{
281-
isarray = (atol((char *) PQgetvalue(query, 0, 0)) == -1) ? ECPG_ARRAY_ARRAY : ECPG_ARRAY_VECTOR;
281+
isarray = (atoi((char *) PQgetvalue(query, 0, 0)) == -1) ? ECPG_ARRAY_ARRAY : ECPG_ARRAY_VECTOR;
282282
if (ecpg_dynamic_type(type) == SQL3_CHARACTER ||
283283
ecpg_dynamic_type(type) == SQL3_CHARACTER_VARYING)
284284
{

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy