Ticket #1480 (closed defect: fixed)
OpenTable bug in ogrpgdatasource.cpp
| Reported by: | sleary@… | Owned by: | warmerdam |
|---|---|---|---|
| Priority: | highest | Milestone: | |
| Component: | OGR_SRS | Version: | unspecified |
| Severity: | major | Keywords: | |
| Cc: |
Description
OpenTable does not check if the table exists before it adds it as a layer to the datasource. This then causes GetLayerByName to fail to ever return null when a layer does not exist as the layer is *ALWAYS* opened by the call to OpenTable.
This can be demonstrated by executing the following pseudocode
for (int i=0;i < 100; i++)
{
pgDatasource->GetLayerByName(RandomNameGenerator());
std::cout << "LAYER COUNT " << pgDataSource->GetLayerCount() << std::endl;
}
The prototype for RandomNameGenerator is: - char *RandomNameGenerator();
Each iteration increases the layer count even though it should not as the random
names do not exist in the database.
See Also GetLayerByName() which uses it as : -
OpenTable( pszName, NULL, TRUE, FALSE );
if(GetLayerCount() == count+1) return GetLayer(count);
return NULL; // (Unreachable code)
Change History
Note: See
TracTickets for help on using
tickets.
