Skip to content

Commit 191bbd1

Browse files
committedMar 27, 2019
Guard against nullptr
1 parent b685d2c commit 191bbd1

File tree

1 file changed

+43
-39
lines changed

1 file changed

+43
-39
lines changed
 

‎src/core/qgsellipsoidutils.cpp

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -349,52 +349,56 @@ QList<QgsEllipsoidUtils::EllipsoidDefinition> QgsEllipsoidUtils::definitions()
349349
QgsReadWriteLocker locker( sEllipsoidCacheLock, QgsReadWriteLocker::Write );
350350

351351
PJ_CONTEXT *context = QgsProjContext::get();
352-
PROJ_STRING_LIST authorities = proj_get_authorities_from_database( context );
353-
PROJ_STRING_LIST authoritiesIt = authorities;
354-
while ( char *authority = *authoritiesIt )
352+
if ( PROJ_STRING_LIST authorities = proj_get_authorities_from_database( context ) )
355353
{
356-
PROJ_STRING_LIST codes = proj_get_codes_from_database( context, authority, PJ_TYPE_ELLIPSOID, 0 );
357-
PROJ_STRING_LIST codesIt = codes;
358-
while ( char *code = *codesIt )
354+
PROJ_STRING_LIST authoritiesIt = authorities;
355+
while ( char *authority = *authoritiesIt )
359356
{
360-
EllipsoidDefinition def;
361-
362-
PJ *ellipsoid = proj_create_from_database( context, authority, code, PJ_CATEGORY_ELLIPSOID, 0, nullptr );
363-
364-
QString name = QString( proj_get_name( ellipsoid ) );
365-
def.acronym = QStringLiteral( "%1:%2" ).arg( authority, code );
366-
name.replace( '_', ' ' );
367-
def.description = QStringLiteral( "%1 (%2:%3)" ).arg( name, authority, code );
368-
369-
double semiMajor, semiMinor, invFlattening;
370-
int semiMinorComputed = 0;
371-
if ( proj_ellipsoid_get_parameters( context, ellipsoid, &semiMajor, &semiMinor, &semiMinorComputed, &invFlattening ) )
357+
if ( PROJ_STRING_LIST codes = proj_get_codes_from_database( context, authority, PJ_TYPE_ELLIPSOID, 0 ) )
372358
{
373-
def.parameters.semiMajor = semiMajor;
374-
def.parameters.semiMinor = semiMinor;
375-
def.parameters.inverseFlattening = invFlattening;
376-
if ( !semiMinorComputed )
377-
def.parameters.crs = QgsCoordinateReferenceSystem::fromProj4( QStringLiteral( "+proj=longlat +a=%1 +b=%2 +no_defs" ).arg( def.parameters.semiMajor, 0, 'g', 17 ).arg( def.parameters.semiMinor, 0, 'g', 17 ) );
378-
else if ( !qgsDoubleNear( def.parameters.inverseFlattening, 0.0 ) )
379-
def.parameters.crs = QgsCoordinateReferenceSystem::fromProj4( QStringLiteral( "+proj=longlat +a=%1 +rf=%2 +no_defs" ).arg( def.parameters.semiMajor, 0, 'g', 17 ).arg( def.parameters.inverseFlattening, 0, 'g', 17 ) );
380-
else
381-
def.parameters.crs = QgsCoordinateReferenceSystem::fromProj4( QStringLiteral( "+proj=longlat +a=%1 +no_defs" ).arg( def.parameters.semiMajor, 0, 'g', 17 ) );
359+
PROJ_STRING_LIST codesIt = codes;
360+
while ( char *code = *codesIt )
361+
{
362+
if ( PJ *ellipsoid = proj_create_from_database( context, authority, code, PJ_CATEGORY_ELLIPSOID, 0, nullptr ) )
363+
{
364+
EllipsoidDefinition def;
365+
QString name = QString( proj_get_name( ellipsoid ) );
366+
def.acronym = QStringLiteral( "%1:%2" ).arg( authority, code );
367+
name.replace( '_', ' ' );
368+
def.description = QStringLiteral( "%1 (%2:%3)" ).arg( name, authority, code );
369+
370+
double semiMajor, semiMinor, invFlattening;
371+
int semiMinorComputed = 0;
372+
if ( proj_ellipsoid_get_parameters( context, ellipsoid, &semiMajor, &semiMinor, &semiMinorComputed, &invFlattening ) )
373+
{
374+
def.parameters.semiMajor = semiMajor;
375+
def.parameters.semiMinor = semiMinor;
376+
def.parameters.inverseFlattening = invFlattening;
377+
if ( !semiMinorComputed )
378+
def.parameters.crs = QgsCoordinateReferenceSystem::fromProj4( QStringLiteral( "+proj=longlat +a=%1 +b=%2 +no_defs" ).arg( def.parameters.semiMajor, 0, 'g', 17 ).arg( def.parameters.semiMinor, 0, 'g', 17 ) );
379+
else if ( !qgsDoubleNear( def.parameters.inverseFlattening, 0.0 ) )
380+
def.parameters.crs = QgsCoordinateReferenceSystem::fromProj4( QStringLiteral( "+proj=longlat +a=%1 +rf=%2 +no_defs" ).arg( def.parameters.semiMajor, 0, 'g', 17 ).arg( def.parameters.inverseFlattening, 0, 'g', 17 ) );
381+
else
382+
def.parameters.crs = QgsCoordinateReferenceSystem::fromProj4( QStringLiteral( "+proj=longlat +a=%1 +no_defs" ).arg( def.parameters.semiMajor, 0, 'g', 17 ) );
383+
}
384+
else
385+
{
386+
def.parameters.valid = false;
387+
}
388+
389+
defs << def;
390+
sEllipsoidCache.insert( def.acronym, def.parameters );
391+
}
392+
393+
codesIt++;
394+
}
395+
proj_string_list_destroy( codes );
382396
}
383-
else
384-
{
385-
def.parameters.valid = false;
386-
}
387-
388-
defs << def;
389-
sEllipsoidCache.insert( def.acronym, def.parameters );
390397

391-
codesIt++;
398+
authoritiesIt++;
392399
}
393-
proj_string_list_destroy( codes );
394-
395-
authoritiesIt++;
400+
proj_string_list_destroy( authorities );
396401
}
397-
proj_string_list_destroy( authorities );
398402
locker.unlock();
399403

400404
#else

0 commit comments

Comments
 (0)
Please sign in to comment.