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

Commitcfa1b4a

Browse files
committed
Minor pg_dump improvements
Improve pg_dump by checking results on various fgetc() calls whichpreviously were unchecked, ditto for ftello. Also clean up a coupleof very minor memory leaks by waiting to allocate structures untilafter the initial check(s).Issues spotted by Coverity.
1 parent66c04c9 commitcfa1b4a

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

‎src/bin/pg_dump/pg_backup_archiver.c

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1898,13 +1898,22 @@ _discoverArchiveFormat(ArchiveHandle *AH)
18981898

18991899
if (strncmp(sig,"PGDMP",5)==0)
19001900
{
1901+
intbyteread;
1902+
19011903
/*
19021904
* Finish reading (most of) a custom-format header.
19031905
*
19041906
* NB: this code must agree with ReadHead().
19051907
*/
1906-
AH->vmaj=fgetc(fh);
1907-
AH->vmin=fgetc(fh);
1908+
if ((byteread=fgetc(fh))==EOF)
1909+
exit_horribly(modulename,"could not read input file: %s\n",strerror(errno));
1910+
1911+
AH->vmaj=byteread;
1912+
1913+
if ((byteread=fgetc(fh))==EOF)
1914+
exit_horribly(modulename,"could not read input file: %s\n",strerror(errno));
1915+
1916+
AH->vmin=byteread;
19081917

19091918
/* Save these too... */
19101919
AH->lookahead[AH->lookaheadLen++]=AH->vmaj;
@@ -1913,7 +1922,10 @@ _discoverArchiveFormat(ArchiveHandle *AH)
19131922
/* Check header version; varies from V1.0 */
19141923
if (AH->vmaj>1|| ((AH->vmaj==1)&& (AH->vmin>0)))/* Version > 1.0 */
19151924
{
1916-
AH->vrev=fgetc(fh);
1925+
if ((byteread=fgetc(fh))==EOF)
1926+
exit_horribly(modulename,"could not read input file: %s\n",strerror(errno));
1927+
1928+
AH->vrev=byteread;
19171929
AH->lookahead[AH->lookaheadLen++]=AH->vrev;
19181930
}
19191931
else
@@ -1922,18 +1934,21 @@ _discoverArchiveFormat(ArchiveHandle *AH)
19221934
/* Make a convenient integer <maj><min><rev>00 */
19231935
AH->version= ((AH->vmaj*256+AH->vmin)*256+AH->vrev)*256+0;
19241936

1925-
AH->intSize=fgetc(fh);
1937+
if ((AH->intSize=fgetc(fh))==EOF)
1938+
exit_horribly(modulename,"could not read input file: %s\n",strerror(errno));
19261939
AH->lookahead[AH->lookaheadLen++]=AH->intSize;
19271940

19281941
if (AH->version >=K_VERS_1_7)
19291942
{
1930-
AH->offSize=fgetc(fh);
1943+
if ((AH->offSize=fgetc(fh))==EOF)
1944+
exit_horribly(modulename,"could not read input file: %s\n",strerror(errno));
19311945
AH->lookahead[AH->lookaheadLen++]=AH->offSize;
19321946
}
19331947
else
19341948
AH->offSize=AH->intSize;
19351949

1936-
AH->format=fgetc(fh);
1950+
if ((AH->format=fgetc(fh))==EOF)
1951+
exit_horribly(modulename,"could not read input file: %s\n",strerror(errno));
19371952
AH->lookahead[AH->lookaheadLen++]=AH->format;
19381953
}
19391954
else

‎src/bin/pg_dump/pg_backup_custom.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,9 @@ _CloseArchive(ArchiveHandle *AH)
708708
{
709709
WriteHead(AH);
710710
tpos=ftello(AH->FH);
711+
if (tpos<0||errno)
712+
exit_horribly(modulename,"could not determine seek position in archive file: %s\n",
713+
strerror(errno));
711714
WriteToc(AH);
712715
ctx->dataStart=_getFilePos(AH,ctx);
713716
WriteDataChunks(AH,NULL);
@@ -756,7 +759,7 @@ _ReopenArchive(ArchiveHandle *AH)
756759

757760
errno=0;
758761
tpos=ftello(AH->FH);
759-
if (errno)
762+
if (tpos<0||errno)
760763
exit_horribly(modulename,"could not determine seek position in archive file: %s\n",
761764
strerror(errno));
762765

‎src/bin/pg_dump/pg_dump.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7145,7 +7145,7 @@ getForeignDataWrappers(Archive *fout, int *numForeignDataWrappers)
71457145
PGresult*res;
71467146
intntups;
71477147
inti;
7148-
PQExpBufferquery=createPQExpBuffer();
7148+
PQExpBufferquery;
71497149
FdwInfo*fdwinfo;
71507150
inti_tableoid;
71517151
inti_oid;
@@ -7163,6 +7163,8 @@ getForeignDataWrappers(Archive *fout, int *numForeignDataWrappers)
71637163
returnNULL;
71647164
}
71657165

7166+
query=createPQExpBuffer();
7167+
71667168
/* Make sure we are in proper schema */
71677169
selectSourceSchema(fout,"pg_catalog");
71687170

@@ -7251,7 +7253,7 @@ getForeignServers(Archive *fout, int *numForeignServers)
72517253
PGresult*res;
72527254
intntups;
72537255
inti;
7254-
PQExpBufferquery=createPQExpBuffer();
7256+
PQExpBufferquery;
72557257
ForeignServerInfo*srvinfo;
72567258
inti_tableoid;
72577259
inti_oid;
@@ -7270,6 +7272,8 @@ getForeignServers(Archive *fout, int *numForeignServers)
72707272
returnNULL;
72717273
}
72727274

7275+
query=createPQExpBuffer();
7276+
72737277
/* Make sure we are in proper schema */
72747278
selectSourceSchema(fout,"pg_catalog");
72757279

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp