Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf5a1311

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 behaviorbut 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 parent7adec2d commitf5a1311

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)

[8]ページ先頭

©2009-2025 Movatter.jp