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

Commitd613861

Browse files
committed
pg_dump: fix subtle memory leak in func and arg signature processing
1 parent3f05bed commitd613861

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed

‎src/bin/pg_dump/pg_dump.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9604,7 +9604,7 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
96049604
PQExpBufferasPart;
96059605
PGresult*res;
96069606
char*funcsig;/* identity signature */
9607-
char*funcfullsig;/* full signature */
9607+
char*funcfullsig=NULL;/* full signature */
96089608
char*funcsig_tag;
96099609
char*proretset;
96109610
char*prosrc;
@@ -9912,13 +9912,10 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
99129912
funcsig=format_function_arguments(finfo,funciargs, false);
99139913
}
99149914
else
9915-
{
99169915
/* pre-8.4, do it ourselves */
99179916
funcsig=format_function_arguments_old(fout,
99189917
finfo,nallargs,allargtypes,
99199918
argmodes,argnames);
9920-
funcfullsig=funcsig;
9921-
}
99229919

99239920
funcsig_tag=format_function_signature(fout,finfo, false);
99249921

@@ -9929,7 +9926,8 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
99299926
fmtId(finfo->dobj.namespace->dobj.name),
99309927
funcsig);
99319928

9932-
appendPQExpBuffer(q,"CREATE FUNCTION %s ",funcfullsig);
9929+
appendPQExpBuffer(q,"CREATE FUNCTION %s ",funcfullsig ?funcfullsig :
9930+
funcsig);
99339931
if (funcresult)
99349932
appendPQExpBuffer(q,"RETURNS %s",funcresult);
99359933
else
@@ -10052,6 +10050,8 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
1005210050
destroyPQExpBuffer(labelq);
1005310051
destroyPQExpBuffer(asPart);
1005410052
free(funcsig);
10053+
if (funcfullsig)
10054+
free(funcfullsig);
1005510055
free(funcsig_tag);
1005610056
if (allargtypes)
1005710057
free(allargtypes);
@@ -11508,7 +11508,7 @@ dumpAgg(Archive *fout, AggInfo *agginfo)
1150811508
PQExpBufferlabelq;
1150911509
PQExpBufferdetails;
1151011510
char*aggsig;/* identity signature */
11511-
char*aggfullsig;/* full signature */
11511+
char*aggfullsig=NULL;/* full signature */
1151211512
char*aggsig_tag;
1151311513
PGresult*res;
1151411514
inti_aggtransfn;
@@ -11656,11 +11656,8 @@ dumpAgg(Archive *fout, AggInfo *agginfo)
1165611656
aggsig=format_function_arguments(&agginfo->aggfn,funciargs, true);
1165711657
}
1165811658
else
11659-
{
1166011659
/* pre-8.4, do it ourselves */
1166111660
aggsig=format_aggregate_signature(agginfo,fout, true);
11662-
aggfullsig=aggsig;
11663-
}
1166411661

1166511662
aggsig_tag=format_aggregate_signature(agginfo,fout, false);
1166611663

@@ -11730,7 +11727,7 @@ dumpAgg(Archive *fout, AggInfo *agginfo)
1173011727
aggsig);
1173111728

1173211729
appendPQExpBuffer(q,"CREATE AGGREGATE %s (\n%s\n);\n",
11733-
aggfullsig,details->data);
11730+
aggfullsig ?aggfullsig :aggsig,details->data);
1173411731

1173511732
appendPQExpBuffer(labelq,"AGGREGATE %s",aggsig);
1173611733

@@ -11773,6 +11770,8 @@ dumpAgg(Archive *fout, AggInfo *agginfo)
1177311770
agginfo->aggfn.rolname,agginfo->aggfn.proacl);
1177411771

1177511772
free(aggsig);
11773+
if (aggfullsig)
11774+
free(aggfullsig);
1177611775
free(aggsig_tag);
1177711776

1177811777
PQclear(res);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp