Skip to content

Commit

Permalink
Fix potential crash while creating geometry from WKB with bad header
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed May 1, 2016
1 parent 752ba70 commit 1f032aa
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/core/geometry/qgsgeometryfactory.cpp
Expand Up @@ -36,7 +36,17 @@ QgsAbstractGeometryV2* QgsGeometryFactory::geomFromWkb( QgsConstWkbPtr wkbPtr )
return nullptr;

//find out type (bytes 2-5)
QgsWKBTypes::Type type = wkbPtr.readHeader();
QgsWKBTypes::Type type = QgsWKBTypes::Unknown;
try
{
type = wkbPtr.readHeader();
}
catch ( const QgsWkbException &e )
{
Q_UNUSED( e );
QgsDebugMsg( "WKB exception while reading header: " + e.what() );
return nullptr;
}
wkbPtr -= 1 + sizeof( int );

QgsAbstractGeometryV2* geom = nullptr;
Expand Down
8 changes: 8 additions & 0 deletions tests/src/core/testqgsgeometry.cpp
Expand Up @@ -3409,6 +3409,14 @@ void TestQgsGeometry::wkbInOut()
QString wkt = g14182.exportToWkt();
QCOMPARE( wkt, QString() );

//WKB with a truncated header
const char *badHeaderHexwkb = "0102";
wkb = hex2bytes( badHeaderHexwkb, &size );
QgsGeometry badHeader;
// NOTE: wkb onwership transferred to QgsGeometry
badHeader.fromWkb( wkb, size );
QVERIFY( badHeader.isEmpty() );
QCOMPARE( badHeader.wkbType(), QGis::WKBUnknown );
}

QTEST_MAIN( TestQgsGeometry )
Expand Down

0 comments on commit 1f032aa

Please sign in to comment.