OGRErr OGRPolygon::importFromWkb( const unsigned char * pabyData, int nSize, OGRwkbVariant eWkbVariant, int& nBytesConsumedOut ) { nBytesConsumedOut = -1; OGRwkbByteOrder eByteOrder = wkbNDR; int nDataOffset = 0; // coverity[tainted_data] OGRErr eErr = oCC.importPreambleFromWkb(this, pabyData, nSize, nDataOffset, eByteOrder, 4, eWkbVariant); if( eErr != OGRERR_NONE ) return eErr; /* -------------------------------------------------------------------- */ /* Get the rings. */ /* -------------------------------------------------------------------- */ for( int iRing = 0; iRing < oCC.nCurveCount; iRing++ ) { OGRLinearRing* poLR = new OGRLinearRing(); oCC.papoCurves[iRing] = poLR; int nBytesConsumedRing = -1; eErr = poLR->_importFromWkb( eByteOrder, flags, pabyData + nDataOffset, nSize, nBytesConsumedRing ); if( eErr != OGRERR_NONE ) { delete oCC.papoCurves[iRing]; oCC.nCurveCount = iRing; return eErr; } CPLAssert( nBytesConsumedRing > 0 ); if( nSize != -1 ) { CPLAssert( nSize >= nBytesConsumedRing ); nSize -= nBytesConsumedRing; } nDataOffset += nBytesConsumedRing; } nBytesConsumedOut = nDataOffset; return OGRERR_NONE; }
OGRErr OGRPolygon::importFromWkb( unsigned char * pabyData, int nSize, OGRwkbVariant eWkbVariant ) { OGRwkbByteOrder eByteOrder = wkbNDR; int nDataOffset = 0; // coverity[tainted_data] OGRErr eErr = oCC.importPreambuleFromWkb(this, pabyData, nSize, nDataOffset, eByteOrder, 4, eWkbVariant); if( eErr != OGRERR_NONE ) return eErr; /* -------------------------------------------------------------------- */ /* Get the rings. */ /* -------------------------------------------------------------------- */ for( int iRing = 0; iRing < oCC.nCurveCount; iRing++ ) { OGRLinearRing* poLR = new OGRLinearRing(); oCC.papoCurves[iRing] = poLR; eErr = poLR->_importFromWkb( eByteOrder, flags, pabyData + nDataOffset, nSize ); if( eErr != OGRERR_NONE ) { delete oCC.papoCurves[iRing]; oCC.nCurveCount = iRing; return eErr; } if( nSize != -1 ) nSize -= poLR->_WkbSize( flags ); nDataOffset += poLR->_WkbSize( flags ); } return OGRERR_NONE; }