From 81895f9ca00aceeb191b3ccbd64ffefe2dc0959b Mon Sep 17 00:00:00 2001 From: Sandro Mani Date: Tue, 2 Dec 2014 13:32:44 +0100 Subject: [PATCH] Store result of OGR_FD_GetGeomType into a QGis::WkbType, not in an int, which causes an integer overflow --- src/core/qgsvectorlayer.cpp | 14 +++++++------- src/core/qgsvectorlayer.h | 2 +- src/providers/ogr/qgsogrdataitems.cpp | 2 +- src/providers/ogr/qgsogrprovider.cpp | 6 +++--- src/providers/ogr/qgsogrprovider.h | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/core/qgsvectorlayer.cpp b/src/core/qgsvectorlayer.cpp index cf02b7c127a..cea0dcbf069 100644 --- a/src/core/qgsvectorlayer.cpp +++ b/src/core/qgsvectorlayer.cpp @@ -650,7 +650,7 @@ bool QgsVectorLayer::hasGeometryType() const QGis::WkbType QgsVectorLayer::wkbType() const { - return ( QGis::WkbType )( mWkbType ); + return mWkbType; } QgsRectangle QgsVectorLayer::boundingBoxOfSelected() @@ -2143,7 +2143,7 @@ bool QgsVectorLayer::deleteAttributes( QList attrs ) qSort( attrs.begin(), attrs.end(), qGreater() ); - Q_FOREACH ( int attr, attrs ) + Q_FOREACH( int attr, attrs ) { if ( deleteAttribute( attr ) ) { @@ -2839,7 +2839,7 @@ void QgsVectorLayer::uniqueValues( int index, QList &uniqueValues, int if ( mEditBuffer ) { QSet vals; - Q_FOREACH ( const QVariant& v, uniqueValues ) + Q_FOREACH( const QVariant& v, uniqueValues ) { vals << v.toString(); } @@ -3565,13 +3565,13 @@ void QgsVectorLayer::invalidateSymbolCountedFlag() void QgsVectorLayer::onRelationsLoaded() { - Q_FOREACH ( QgsAttributeEditorElement* elem, mAttributeEditorElements ) + Q_FOREACH( QgsAttributeEditorElement* elem, mAttributeEditorElements ) { if ( elem->type() == QgsAttributeEditorElement::AeTypeContainer ) { QgsAttributeEditorContainer* cont = dynamic_cast< QgsAttributeEditorContainer* >( elem ); QList relations = cont->findElements( QgsAttributeEditorElement::AeTypeRelation ); - Q_FOREACH ( QgsAttributeEditorElement* relElem, relations ) + Q_FOREACH( QgsAttributeEditorElement* relElem, relations ) { QgsAttributeEditorRelation* rel = dynamic_cast< QgsAttributeEditorRelation* >( relElem ); rel->init( QgsProject::instance()->relationManager() ); @@ -3627,7 +3627,7 @@ QDomElement QgsAttributeEditorContainer::toDomElement( QDomDocument& doc ) const QDomElement elem = doc.createElement( "attributeEditorContainer" ); elem.setAttribute( "name", mName ); - Q_FOREACH ( QgsAttributeEditorElement* child, mChildren ) + Q_FOREACH( QgsAttributeEditorElement* child, mChildren ) { elem.appendChild( child->toDomElement( doc ) ); } @@ -3643,7 +3643,7 @@ QList QgsAttributeEditorContainer::findElements( Qgs { QList results; - Q_FOREACH ( QgsAttributeEditorElement* elem, mChildren ) + Q_FOREACH( QgsAttributeEditorElement* elem, mChildren ) { if ( elem->type() == type ) { diff --git a/src/core/qgsvectorlayer.h b/src/core/qgsvectorlayer.h index 6481d9889a4..08dc8c9369b 100644 --- a/src/core/qgsvectorlayer.h +++ b/src/core/qgsvectorlayer.h @@ -1735,7 +1735,7 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer QList< TabData > mTabs; /** Geometry type as defined in enum WkbType (qgis.h) */ - int mWkbType; + QGis::WkbType mWkbType; /** Renderer object which holds the information about how to display the features */ QgsFeatureRendererV2 *mRendererV2; diff --git a/src/providers/ogr/qgsogrdataitems.cpp b/src/providers/ogr/qgsogrdataitems.cpp index 2c1a4c72a18..806e9a75de8 100644 --- a/src/providers/ogr/qgsogrdataitems.cpp +++ b/src/providers/ogr/qgsogrdataitems.cpp @@ -140,7 +140,7 @@ static QgsOgrLayerItem* dataItemForLayer( QgsDataItem* parentItem, QString name, OGRFeatureDefnH hDef = OGR_L_GetLayerDefn( hLayer ); QgsLayerItem::LayerType layerType = QgsLayerItem::Vector; - int ogrType = QgsOgrProvider::getOgrGeomType( hLayer ); + OGRwkbGeometryType ogrType = QgsOgrProvider::getOgrGeomType( hLayer ); switch ( ogrType ) { case wkbUnknown: diff --git a/src/providers/ogr/qgsogrprovider.cpp b/src/providers/ogr/qgsogrprovider.cpp index 7740d78c2c5..05341657777 100644 --- a/src/providers/ogr/qgsogrprovider.cpp +++ b/src/providers/ogr/qgsogrprovider.cpp @@ -695,10 +695,10 @@ void QgsOgrProvider::setEncoding( const QString& e ) } // This is reused by dataItem -int QgsOgrProvider::getOgrGeomType( OGRLayerH ogrLayer ) +OGRwkbGeometryType QgsOgrProvider::getOgrGeomType( OGRLayerH ogrLayer ) { OGRFeatureDefnH fdef = OGR_L_GetLayerDefn( ogrLayer ); - int geomType = wkbUnknown; + OGRwkbGeometryType geomType = wkbUnknown; if ( fdef ) { geomType = OGR_FD_GetGeomType( fdef ); @@ -935,7 +935,7 @@ size_t QgsOgrProvider::layerCount() const */ QGis::WkbType QgsOgrProvider::geometryType() const { - return ( QGis::WkbType ) geomType; + return static_cast( geomType ); } /** diff --git a/src/providers/ogr/qgsogrprovider.h b/src/providers/ogr/qgsogrprovider.h index 1f8296ee18d..bd4da19692e 100644 --- a/src/providers/ogr/qgsogrprovider.h +++ b/src/providers/ogr/qgsogrprovider.h @@ -248,7 +248,7 @@ class QgsOgrProvider : public QgsVectorDataProvider virtual bool doesStrictFeatureTypeCheck() const { return false;} /** return OGR geometry type */ - static int getOgrGeomType( OGRLayerH ogrLayer ); + static OGRwkbGeometryType getOgrGeomType( OGRLayerH ogrLayer ); /** Get single flatten geometry type */ static OGRwkbGeometryType ogrWkbSingleFlatten( OGRwkbGeometryType type ); @@ -325,7 +325,7 @@ class QgsOgrProvider : public QgsVectorDataProvider bool valid; //! Flag to indicate that spatial intersect should be used in selecting features bool mUseIntersect; - int geomType; + OGRwkbGeometryType geomType; long featuresCounted; //! Data has been modified - REPACK before creating a spatialindex