[gdal-dev] GDAL error from Mapserver 7.0

Even Rouault even.rouault at spatialys.com
Fri Sep 11 01:19:17 PDT 2015


Le vendredi 11 septembre 2015 10:05:29, Even Rouault a écrit :
> Le vendredi 11 septembre 2015 09:40:03, Jukka Rahkonen a écrit :
> > Even Rouault <even.rouault <at> spatialys.com> writes:
> > > The crash is indeed linked to the fact that a wrong table name was
> > > passed.
> > 
> > And
> > 
> > > to reach that point the table name was of the form
> > > "table_name(geom_column_name)", right ?
> > > 
> > > Fixed by https://trac.osgeo.org/gdal/ticket/6103
> > > 
> > > As far as the why there's this one character offset, the fundamental
> > > cause
> > 
> > for
> > 
> > > the issue, I don't know without having a way to reproduce.
> > 
> > Hi,
> > 
> > I got a hint that it might originate from the SQLite driver as well but
> > we
> 
> > have not yet understood the code well enough:
> Oh.... indeed. I see now what is wrong. You have been correctly hinted.
> Fixed by https://trac.osgeo.org/gdal/ticket/6107
> The issue was also present in 1.11
> The code wasn't careful enough and confused successive identical regular
> characters with consecutive quote characters...

As a workaround rewrite your SQL statement to quote the table identifier

SELECT .... FROM "uusimmat_kuvat"
or
SELECT .... FROM 'uusimmat_kuvat'

(but it might be MapServer that writes this SQL statement from the table name. 
But you can try putting the plain SQL statement as the DATA)

> 
> >     size_t nFromPos = osSQLBase.ifind(" from ");
> >     if (nFromPos == std::string::npos)
> >     {
> >     
> >         return std::pair<OGRLayer*,
> > 
> > IOGRSQLiteGetSpatialWhere*>((OGRLayer*)NULL,
> > (IOGRSQLiteGetSpatialWhere*)NULL); }
> > 
> >     char chQuote = osSQLBase[nFromPos + 6];
> >     int bInQuotes = (chQuote == '\'' || chQuote == '"' );
> >     CPLString osBaseLayerName;
> >     for( i = nFromPos + 6 + (bInQuotes ? 1 : 0);
> >     
> >          i < osSQLBase.size(); i++ )
> >     
> >     {
> >     
> >         if (osSQLBase[i] == chQuote && i + 1 < osSQLBase.size() &&
> >         
> >             osSQLBase[i + 1] == chQuote )
> >         
> >         {
> >         
> >             osBaseLayerName += osSQLBase[i];
> >             i++;
> >         
> >         }
> >         else if (osSQLBase[i] == chQuote && bInQuotes)
> >         {
> >         
> >             i++;
> >             break;
> >         
> >         }
> >         else if (osSQLBase[i] == ' ' && !bInQuotes)
> >         
> >             break;
> >         
> >         else
> >         
> >             osBaseLayerName += osSQLBase[i];
> >     
> >     }
> > 
> > -Jukka-
> > 
> > _______________________________________________
> > gdal-dev mailing list
> > gdal-dev at lists.osgeo.org
> > http://lists.osgeo.org/mailman/listinfo/gdal-dev

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com


More information about the gdal-dev mailing list