From: U-QUAN-W4\Administrator Date: Wed, 3 Feb 2010 13:54:29 +0000 (+0800) Subject: fix a crash & a wrong pointer X-Git-Url: http://git.postgresql.org/gitweb/static/%7B%7Bpgdulink%28?a=commitdiff_plain;h=2dd6c7b3d8157d94c34ced25416b25b6c7e692af;p=users%2Fquan74%2Fpgadmin-import.git fix a crash & a wrong pointer --- diff --git a/pgadmin/utils/pgcsvfile.cpp b/pgadmin/utils/pgcsvfile.cpp index 803482c0b..c1b7f1810 100755 --- a/pgadmin/utils/pgcsvfile.cpp +++ b/pgadmin/utils/pgcsvfile.cpp @@ -1111,7 +1111,7 @@ void pgCSVFile::SetPreviewRowsNum(const size_t rowsnum) else m_pvrowsnum = rowsnum; - GenCSVPreview(rowsnum==(size_t)0); + GenCSVPreview(m_pvparsedrowsnum==(size_t)0); } wxFileOffset pgCSVFile::GenMoreFilePreview(wxString *pvstr) @@ -1261,7 +1261,7 @@ size_t pgCSVFile::GenCSVPreview(const bool isinit) bool isfileeof = Eof(), incolparsing, inquotedblk; size_t *tmpcolsnums; wxString *fileline, **tmpcsvlines, **parsedvals, ***tmpcolsvals; - while (isinit || m_pvparsedrowsnumAppend(csvdata[*parsedoffset]); - if (csvdata[(*parsedoffset)+1]) + + if (csvdata[(*parsedoffset)+1]==m_quotedby) { - if (csvdata[(*parsedoffset)+1]==m_quotedby) + if (csvdata[(*parsedoffset)+2]) { - if (csvdata[(*parsedoffset)+2]) + if (m_chardlmvals && csvdata[(*parsedoffset)+2]==m_chardlmvals[0]) { - if (m_chardlmvals && csvdata[(*parsedoffset)+2]==m_chardlmvals[0]) + size_t dlmidx = (size_t)1; + while (m_chardlmvals[dlmidx]) { - size_t dlmidx = (size_t)1; - while (m_chardlmvals[dlmidx]) - { - if (csvdata[(*parsedoffset)+dlmidx+2]!=m_chardlmvals[dlmidx]) - break; - dlmidx++; - } - if (m_chardlmvals[dlmidx]) + if (csvdata[(*parsedoffset)+dlmidx+2]!=m_chardlmvals[dlmidx]) + break; + dlmidx++; + } + if (m_chardlmvals[dlmidx]) + { + if (csvdata[(*parsedoffset)+dlmidx+2]) { - if (csvdata[(*parsedoffset)+dlmidx+2]) + if (linedata) + linedata->Append(csvdata[*parsedoffset]).Append(csvdata[(*parsedoffset)+1]); + if (!colval) + colval = new wxString; + colval->Append(csvdata[*parsedoffset]); + (*parsedoffset)++; + (*parsedoffset)++; + while (dlmidx--) { if (linedata) - linedata->Append(csvdata[*parsedoffset]).Append(csvdata[(*parsedoffset)+1]); - if (!colval) - colval = new wxString; - colval->Append(csvdata[*parsedoffset]); - (*parsedoffset)++; - (*parsedoffset)++; - while (dlmidx--) - { - if (linedata) - linedata->Append(csvdata[*parsedoffset]); - colval->Append(csvdata[(*parsedoffset)++]); - } - } - else - { - if (parsedarr) - { - if (!(*incolparsing)) - { - tmparr = parsedarr; - parsedarr = new wxString *[(*curcolnr)+2]; - memcpy(parsedarr, tmparr, sizeof(parsedarr)*((*curcolnr)+1)); - delete []tmparr; - (*curcolnr)++; - *incolparsing = true; - } - } - else - { - parsedarr = new wxString *[1]; - *curcolnr = (size_t)0; - } - parsedarr[*curcolnr] = colval; - if (hasmore) - *rsval = wxInvalidOffset; - else - { - *parsedoffset += dlmidx + 2; - *rsval = *parsedoffset; - } - return parsedarr; + linedata->Append(csvdata[*parsedoffset]); + colval->Append(csvdata[(*parsedoffset)++]); } } else { - if (colval) - colval->Append(csvdata[*parsedoffset]); - else - colval = new wxString; if (parsedarr) { if (!(*incolparsing)) @@ -2048,9 +2013,8 @@ wxString **pgCSVFile::ParseLine(const wxChar *csvdata, size_t *parsedoffset, con memcpy(parsedarr, tmparr, sizeof(parsedarr)*((*curcolnr)+1)); delete []tmparr; (*curcolnr)++; + *incolparsing = true; } - else - *incolparsing = false; } else { @@ -2058,27 +2022,49 @@ wxString **pgCSVFile::ParseLine(const wxChar *csvdata, size_t *parsedoffset, con *curcolnr = (size_t)0; } parsedarr[*curcolnr] = colval; - colval = NULL; - parsedoffset += dlmidx + 2; - if (linedata) + if (hasmore) + *rsval = wxInvalidOffset; + else { - linedata->Append(csvdata[*parsedoffset]).Append(csvdata[(*parsedoffset)+1]); - colval->Append(m_chardlmvals); + *parsedoffset += dlmidx + 2; + *rsval = *parsedoffset; } + return parsedarr; } } else { + if (colval) + colval->Append(csvdata[*parsedoffset]); + else + colval = new wxString; + + if (parsedarr) + { + if (!(*incolparsing)) + { + tmparr = parsedarr; + parsedarr = new wxString *[(*curcolnr)+2]; + memcpy(parsedarr, tmparr, sizeof(parsedarr)*((*curcolnr)+1)); + delete []tmparr; + (*curcolnr)++; + } + else + *incolparsing = false; + } + else + { + parsedarr = new wxString *[1]; + *curcolnr = (size_t)0; + } + parsedarr[*curcolnr] = colval; + colval = NULL; + *parsedoffset += dlmidx + 2; if (linedata) linedata->Append(csvdata[*parsedoffset]).Append(csvdata[(*parsedoffset)+1]); - if (!colval) - colval = new wxString; - colval->Append(csvdata[*parsedoffset]); - (*parsedoffset)++; - (*parsedoffset)++; } } - else if (hasmore) + else { if (linedata) linedata->Append(csvdata[*parsedoffset]).Append(csvdata[(*parsedoffset)+1]); @@ -2087,66 +2073,74 @@ wxString **pgCSVFile::ParseLine(const wxChar *csvdata, size_t *parsedoffset, con colval->Append(csvdata[*parsedoffset]); (*parsedoffset)++; (*parsedoffset)++; - if (parsedarr) - { - if (!(*incolparsing)) - { - tmparr = parsedarr; - parsedarr = new wxString *[(*curcolnr)+2]; - memcpy(parsedarr, tmparr, sizeof(parsedarr)*((*curcolnr)+1)); - delete []tmparr; - (*curcolnr)++; - } - } - else + } + } + else if (hasmore) + { + if (linedata) + linedata->Append(csvdata[*parsedoffset]).Append(csvdata[(*parsedoffset)+1]); + if (!colval) + colval = new wxString; + colval->Append(csvdata[*parsedoffset]); + (*parsedoffset)++; + (*parsedoffset)++; + if (parsedarr) + { + if (!(*incolparsing)) { - parsedarr = new wxString *[1]; - *curcolnr = (size_t)0; + tmparr = parsedarr; + parsedarr = new wxString *[(*curcolnr)+2]; + memcpy(parsedarr, tmparr, sizeof(parsedarr)*((*curcolnr)+1)); + delete []tmparr; + (*curcolnr)++; } - *incolparsing = true; - parsedarr[*curcolnr] = colval; - *rsval = wxInvalidOffset; - return parsedarr; } else { - if (linedata) - linedata->Append(csvdata[*parsedoffset]).Append(csvdata[(*parsedoffset)+1]); - if (!colval) - colval = new wxString; - colval->Append(csvdata[*parsedoffset]); - (*parsedoffset)++; - (*parsedoffset)++; - if (parsedarr) - { - if (!(*incolparsing)) - { - tmparr = parsedarr; - parsedarr = new wxString *[(*curcolnr)+2]; - memcpy(parsedarr, tmparr, sizeof(parsedarr)*((*curcolnr)+1)); - delete []tmparr; - (*curcolnr)++; - } - } - else - { - parsedarr = new wxString *[1]; - *curcolnr = (size_t)0; - } - *incolparsing = false; - parsedarr[*curcolnr] = colval; - *rsval = *parsedoffset; - return parsedarr; + parsedarr = new wxString *[1]; + *curcolnr = (size_t)0; } + *incolparsing = true; + parsedarr[*curcolnr] = colval; + *rsval = wxInvalidOffset; + return parsedarr; } else { - //if (linedata) - // linedata->Append(csvdata[*parsedoffset]); - *inquotedblk = true; + if (linedata) + linedata->Append(csvdata[*parsedoffset]).Append(csvdata[(*parsedoffset)+1]); + if (!colval) + colval = new wxString; + colval->Append(csvdata[*parsedoffset]); + (*parsedoffset)++; (*parsedoffset)++; + if (parsedarr) + { + if (!(*incolparsing)) + { + tmparr = parsedarr; + parsedarr = new wxString *[(*curcolnr)+2]; + memcpy(parsedarr, tmparr, sizeof(parsedarr)*((*curcolnr)+1)); + delete []tmparr; + (*curcolnr)++; + } + } + else + { + parsedarr = new wxString *[1]; + *curcolnr = (size_t)0; + } + *incolparsing = false; + parsedarr[*curcolnr] = colval; + *rsval = *parsedoffset; + return parsedarr; } } + else if (csvdata[(*parsedoffset)+1]) + { + *inquotedblk = true; + (*parsedoffset)++; + } else if (hasmore) { if (parsedarr)