Changes between Version 1 and Version 2 of Ticket #6312


Ignore:
Timestamp:
Jan 15, 2016, 3:41:05 AM (9 years ago)
Author:
dsogari
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #6312 – Description

    v1 v2  
    1 Perhaps this is not a naturally ocurring use case scenario, but the SetGeomField member function of OGRFeature that takes the field index as parameter is not robust, in that it does not check whether the old geometry pointer is the same as the new one. In the case that they are the same ({{{papoGeometries[iField] == poGeomIn}}}) the call of the {{{clone()}}} method (line 744 of ogrfeature.cpp in trunk) causes memory access violation, because the geometry's destructor is executed in the preceding delete statement (line 741 of ogrfeature.cpp).
     1Perhaps this is not a naturally occurring use case scenario, but the SetGeomField member function of OGRFeature that takes the field index as parameter is not robust, in that it does not check whether the old geometry pointer is the same as the new one. In the case that they are the same ({{{papoGeometries[iField] == poGeomIn}}}) the call of the {{{clone()}}} method (line 744 of ogrfeature.cpp in trunk) causes memory access violation, because the geometry's destructor is executed in the preceding delete statement (line 741 of ogrfeature.cpp).
    22
    33Fix: save {{{papoGeometries[iField]}}} to a temp variable and delete it afterwards
    44
    55{{{
    6 OGRGeometry *oldGeometry = papoGeometries[iField];
     6OGRGeometry *poOldGeometry = papoGeometries[iField];
    77
    88...
    99
    10 delete oldGeometry;
     10delete poOldGeometry;
    1111}}}
    1212