Обсуждение: BUG: pgIndex.cpp
switch (indexes->GetVal(wxT("contype"))[0U]) { case 0: index = new pgIndex(collection->GetSchema(), indexes->GetVal(wxT("idxname"))); break; case 'p': index = new pgPrimaryKey(collection->GetSchema(), indexes->GetVal(wxT("idxname"))); break; case 'u': index = new pgUnique(collection->GetSchema(), indexes->GetVal(wxT("idxname"))); break; default: index=0; break; } index->iSetOid(indexes->GetOid(wxT("oid"))); in case of the default branch taken, this code will SIGSEGV Pascal Pochet
> -----Original Message----- > From: pgadmin-hackers-owner@postgresql.org > [mailto:pgadmin-hackers-owner@postgresql.org] On Behalf Of P3 > Consulting > Sent: 08 January 2005 10:28 > To: pgadmin-hackers > Subject: [pgadmin-hackers] BUG: pgIndex.cpp > > switch (indexes->GetVal(wxT("contype"))[0U]) > { > case 0: > index = new pgIndex(collection->GetSchema(), indexes->GetVal(wxT("idxname"))); > break; > case 'p': > index = new pgPrimaryKey(collection->GetSchema(), indexes->GetVal(wxT("idxname"))); > break; > case 'u': > index = new pgUnique(collection->GetSchema(), indexes->GetVal(wxT("idxname"))); > break; > default: > index=0; > break; > } > index->iSetOid(indexes->GetOid(wxT("oid"))); > > in case of the default branch taken, this code will SIGSEGV Hi Andreas, Did you get a chance to look at this? It seems to me that the quick and dirty solution is to wrap the index->iSetxxx calls in an 'if (index)', however I'm not entirely convinced that is safe given that it's possible to return a null index pointer to the caller (which without significant trawling through code I may not find all instances of). Regards, Dave.
Dave Page wrote: > Did you get a chance to look at this? It seems to me that the quick and > dirty solution is to wrap the index->iSetxxx calls in an 'if (index)', > however I'm not entirely convinced that is safe given that it's possible > to return a null index pointer to the caller (which without significant > trawling through code I may not find all instances of). I don't see the point catching this beyond an assert. A sane pgsql will never return contype != p, u, or NULL unless system tables are corrupted. Regards, Andreas
> -----Original Message----- > From: Andreas Pflug [mailto:pgadmin@pse-consulting.de] > Sent: 12 January 2005 09:27 > To: Dave Page > Cc: P3 Consulting; pgadmin-hackers > Subject: Re: [pgadmin-hackers] BUG: pgIndex.cpp > > Dave Page wrote: > > > Did you get a chance to look at this? It seems to me that > the quick and > > dirty solution is to wrap the index->iSetxxx calls in an > 'if (index)', > > however I'm not entirely convinced that is safe given that > it's possible > > to return a null index pointer to the caller (which without > significant > > trawling through code I may not find all instances of). > > I don't see the point catching this beyond an assert. A sane > pgsql will > never return contype != p, u, or NULL unless system tables > are corrupted. Very true. Regards, Dave.