Re: [HACKERS] odd pg_dump output? - Mailing list pgsql-hackers
From | Bruce Momjian |
---|---|
Subject | Re: [HACKERS] odd pg_dump output? |
Date | |
Msg-id | 199808291806.OAA10850@candle.pha.pa.us Whole thread Raw |
In response to | Re: [HACKERS] odd pg_dump output? (Tatsuo Ishii <t-ishii@sra.co.jp>) |
List | pgsql-hackers |
Patch applied. > >This appears to be fixed. Beta is September 1. > > Ok. BTW Mr. Kataoka who is maintaing Japanese version of PostgreSQL > ODBC driver have found a bug in 6.3.2 pg_dump and have made patches. I > confirmed that the same bug still exists in the current source > tree. So I made up patches based on Kataoka's. Here are some > explanations. > > o fmtId() returns pointer to a static memory in it. In the meantime > there is a line where is fmtId() called twice without saving the first > value returned by fmtId(). So second call to fmtId() will break the > first one. > > o findTableByName() looks up a table by its name. if a table name > contanins upper letters or non ascii chars, fmtId() will returns a > name quoted in double quotes, which will not what findTableByName() > wants. The result is SEG fault. > -- > Tatsuo Ishii > t-ishii@sra.co.jp > > *** pg_dump.c.orig Wed Aug 26 00:02:04 1998 > --- pg_dump.c Sat Aug 29 22:34:24 1998 > *************** > *** 2435,2441 **** > int i, > j, > k; > ! char q[MAXQUERYLEN]; > char **parentRels; /* list of names of parent relations */ > int numParents; > int actual_atts; /* number of attrs in this CREATE statment */ > --- 2435,2443 ---- > int i, > j, > k; > ! char q[MAXQUERYLEN], > ! id1[MAXQUERYLEN], > ! id2[MAXQUERYLEN]; > char **parentRels; /* list of names of parent relations */ > int numParents; > int actual_atts; /* number of attrs in this CREATE statment */ > *************** > *** 2506,2516 **** > } > else > { > sprintf(q, "%s%s%s %s", > q, > (actual_atts > 0) ? ", " : "", > ! fmtId(tblinfo[i].attnames[j]), > ! fmtId(tblinfo[i].typnames[j])); > actual_atts++; > } > if (tblinfo[i].adef_expr[j] != NULL) > --- 2508,2520 ---- > } > else > { > + strcpy(id1, fmtId(tblinfo[i].attnames[j])); > + strcpy(id2, fmtId(tblinfo[i].typnames[j])); > sprintf(q, "%s%s%s %s", > q, > (actual_atts > 0) ? ", " : "", > ! id1, > ! id2); > actual_atts++; > } > if (tblinfo[i].adef_expr[j] != NULL) > *************** > *** 2572,2584 **** > indclass; > int nclass; > > ! char q[MAXQUERYLEN]; > PGresult *res; > > for (i = 0; i < numIndices; i++) > { > tableInd = findTableByName(tblinfo, numTables, > ! fmtId(indinfo[i].indrelname)); > > if (strcmp(indinfo[i].indproc, "0") == 0) > funcname = NULL; > --- 2576,2590 ---- > indclass; > int nclass; > > ! char q[MAXQUERYLEN], > ! id1[MAXQUERYLEN], > ! id2[MAXQUERYLEN]; > PGresult *res; > > for (i = 0; i < numIndices; i++) > { > tableInd = findTableByName(tblinfo, numTables, > ! (indinfo[i].indrelname)); > > if (strcmp(indinfo[i].indproc, "0") == 0) > funcname = NULL; > *************** > *** 2659,2666 **** > attname, indinfo[i].indexrelname); > exit_nicely(g_conn); > } > sprintf(attlist + strlen(attlist), "%s%s %s", > ! (k == 0) ? "" : ", ", fmtId(attname), fmtId(classname[k])); > free(classname[k]); > } > } > --- 2665,2674 ---- > attname, indinfo[i].indexrelname); > exit_nicely(g_conn); > } > + strcpy(id1, fmtId(attname)); > + strcpy(id2, fmtId(classname[k])); > sprintf(attlist + strlen(attlist), "%s%s %s", > ! (k == 0) ? "" : ", ", id1, id2); > free(classname[k]); > } > } > *************** > *** 2668,2677 **** > if (!tablename || (!strcmp(indinfo[i].indrelname, tablename))) > { > > sprintf(q, "CREATE %s INDEX %s on %s using %s (", > (strcmp(indinfo[i].indisunique, "t") == 0) ? "UNIQUE" : "", > ! fmtId(indinfo[i].indexrelname), > ! fmtId(indinfo[i].indrelname), > indinfo[i].indamname); > if (funcname) > { > --- 2676,2687 ---- > if (!tablename || (!strcmp(indinfo[i].indrelname, tablename))) > { > > + strcpy(id1, fmtId(indinfo[i].indexrelname)); > + strcpy(id2, fmtId(indinfo[i].indrelname)); > sprintf(q, "CREATE %s INDEX %s on %s using %s (", > (strcmp(indinfo[i].indisunique, "t") == 0) ? "UNIQUE" : "", > ! id1, > ! id2, > indinfo[i].indamname); > if (funcname) > { > -- Bruce Momjian | 830 Blythe Avenue maillist@candle.pha.pa.us | Drexel Hill, Pennsylvania 19026 + If your life is a hard drive, | (610) 353-9879(w) + Christ can be your backup. | (610) 853-3000(h)
pgsql-hackers by date: