| 1 | = GDAL/OGR 2.2.2 Release Notes = |
| 2 | |
| 3 | The 2.2.2 release is a bug fix release. |
| 4 | |
| 5 | == Build == |
| 6 | |
| 7 | * Windows build: always build the PDF driver, even when none of poppler/podofo/pdfium are available, in which case it is write-only (#6938) |
| 8 | * Compilation fixes on Ubuntu 16.04 with explicit --std=c++03 (#6952) |
| 9 | |
| 10 | == Port == |
| 11 | |
| 12 | * /vsigzip/: make Eof() detect end of stream when receive a Z_BUF_ERROR error. Fixes #6944. |
| 13 | * Fix memleak in VSIGSFSHandler::GetFileList() |
| 14 | * /vsigzip/: avoid trying to write a .gz.properties file on a /vsicurl/ file (#7016) |
| 15 | * Fix registration of /vsicrypt/ file system handler when compiled as a plugin (#7030) |
| 16 | * CPLStrtod(): parse string like '-1.#IND0000000' as NaN instead of -1 (#7031) |
| 17 | |
| 18 | == Algorithms == |
| 19 | |
| 20 | * Warper: when operating on single-band, skip target pixels whose source center pixel is nodata (2.2 regression, #7001) |
| 21 | * Warper: avoid blocking when number of rows is 1 and NUM_THREADS > 1 (#7041). Also limit the number of threads so that each one processes at least 65536 pixels |
| 22 | |
| 23 | == GDAL core == |
| 24 | |
| 25 | * GDALGCPsToGeoTransform(): add GDAL_GCPS_TO_GEOTRANSFORM_APPROX_OK=YES and GDAL_GCPS_TO_GEOTRANSFORM_APPROX_THRESHOLD=threshold_in_pixel configuration option (#6995) |
| 26 | * Fix issue with GDALProxyRasterBand::FlushCache() not flushing everything required (#7040) |
| 27 | * RawDataset::IRasterIO(): don't assume all bands are RawRasterBand |
| 28 | |
| 29 | == GDAL utilities == |
| 30 | |
| 31 | * gdal2tiles.py: fix GDAL 2.2 regression where tilemapresource.xml was no longer generated (#6966) |
| 32 | * gdal_translate/DefaultCreateCopy(): do not destroy target file in case of failed copy wen using -co APPEND_SUBDATASET=YES (#7019) |
| 33 | * gdal_translate: make -b mask[,xx] use the appropriate band data type (#7028) |
| 34 | |
| 35 | == GDAL drivers == |
| 36 | |
| 37 | GeoRaster driver: |
| 38 | * add support for GCP (#6973) |
| 39 | |
| 40 | GPKG driver: |
| 41 | * do not error out if extent in gpkg_contents is present but invalid (#6976) |
| 42 | * fix opening subdatasets with absolute filenames on Windows (https://issues.qgis.org/issues/16997) |
| 43 | * fix possible assertion / corruption when creating a raster GeoPackage (#7022) |
| 44 | |
| 45 | GSAG driver: |
| 46 | * fix reading issue that could cause a spurious 0 value to be read and shift all following values (#6992) |
| 47 | |
| 48 | GTiff driver: |
| 49 | * fix reading subsampled JPEG-in-TIFF when block height = 8 (#6988) |
| 50 | * when reading a COMPD_CS (and GTIFF_REPORT_COMPD_CS=YES), set the name from the GTCitationGeoKey (#7011) |
| 51 | |
| 52 | GTX driver: |
| 53 | * do not emit error when opening with GDAL_PAM_ENABLED=NO (#6996) |
| 54 | |
| 55 | HF2 driver: |
| 56 | * fix reading tiles that are 1-pixel wide (2.1 regression, #6949) |
| 57 | |
| 58 | IDRISI driver: |
| 59 | * Fix memleak in IDRISI Open() |
| 60 | |
| 61 | ISIS3 driver: |
| 62 | * make sure that -co USE_SRC_HISTORY=NO -co ADD_GDAL_HISTORY=NO results in remove of History section (#6968) |
| 63 | * fix logic to initialize underlying GeoTIFF file in IWriteBlock(), and implement Fill() (#7040) |
| 64 | |
| 65 | JPEG2000 driver: |
| 66 | * Fix build failure in C++03 mode on Jasper inclusion in RHEL 6 (#6951) |
| 67 | * Fix build failure with recent Jasper that no longer define uchar |
| 68 | |
| 69 | JP2OpenJPEG driver: |
| 70 | * Add support for building against OpenJPEG 2.2 (#7002) |
| 71 | * fix performance issues with small images with very small tile size, such as some Sentinel2 quicklooks (#7012) |
| 72 | * properly use the opj_set_decode_area() API (#7018) |
| 73 | |
| 74 | netCDF driver: |
| 75 | * avoid vector vs raster variable confusion that prevents reading Sentinel3 datasets, and avoid invalid geolocation array to be reported (#6974) |
| 76 | |
| 77 | PDF driver: |
| 78 | * add support for Poppler 0.58 (#7033) |
| 79 | |
| 80 | PDS driver: |
| 81 | * fix parsing of labels with nested list constructs (2.2 regression, #6970) |
| 82 | |
| 83 | SRTMHGT driver: |
| 84 | * recognizes the .hgt.gz extension (#7016) |
| 85 | |
| 86 | VRT driver: |
| 87 | * avoid stack buffer read overflow with complex data type and scale = 0. (oss-fuzz#2468) |
| 88 | * fix uninitialized buffer in areas without sources when using non pixel packed spacing (#6965) |
| 89 | * Warped VRT: correctly take into account cutline for implicit overviews; also avoid serializing a duplicate CUTLINE warping options in warped .vrt (#6954) |
| 90 | * Warped VRT: fix implicit overview when output geotransform is not the same as the transformer dst geotransform (#6972) |
| 91 | * fix IGetDataCoverageStatus() in the case of non-simple sources, which unbreaks gdalenhance -equalize (#6987) |
| 92 | |
| 93 | == OGR core == |
| 94 | |
| 95 | * OGRCompondCurve::addCurveDirectly(): try reversing non contiguous curves (for GML/NAS) |
| 96 | * OGR API SPY: fix the way we map dataset handles to variable name, to avoid invalid reuses of variable still active |
| 97 | * OGRParseDate(): avoid false-positive time detection, in particular for GeoJSON (#7014) |
| 98 | * OGRCurve::get_isClosed(): do not take into account M component (#7017) |
| 99 | * OGRLineString::setPoint() and addPoint() with a OGRPoint* argument. properly takes into account ZM, Z and M dimensions (#7017) |
| 100 | |
| 101 | == OGRSpatialReference == |
| 102 | |
| 103 | * Fix OGRSpatialReference::IsSame() to return FALSE when comparing EPSG:3857 (web_mercator) and EPSG:3395 (WGS84 Mercator) (#7029) |
| 104 | * importFromProj4(): implement import of Hotine Oblique Mercator Two Points Natural Origin, and fix OGRSpatialReference::Validate() for that formulation (#7042) |
| 105 | |
| 106 | == OGR utilities == |
| 107 | |
| 108 | * ogr2ogr: fix small memory leak when using -limit switch |
| 109 | * ogr2ogr: make -f GMT work again (#6993) |
| 110 | |
| 111 | == OGR drivers == |
| 112 | |
| 113 | AVCBin driver: |
| 114 | * fix 2.1 regression regarding attributes fetching (#6950) |
| 115 | |
| 116 | DXF driver: |
| 117 | * fix reading files where INSERT is the last entity and DXF_MERGE_BLOCK_GEOMETRIES is false (#7006) |
| 118 | * avoid segfault when creating a DXF file with only the 'blocks' layer (#6998) |
| 119 | * fix potential null pointer dereference in PrepareLineStyle (#7038) |
| 120 | |
| 121 | GeoJSON driver: |
| 122 | * fix 2.2 regression regarding lack of setting the FeatureCollection CRS on feature geometries (fixes https://github.com/r-spatial/sf/issues/449#issuecomment-319369945) |
| 123 | * prevent infinite recursion when reading geocouch spatiallist with properties.properties.properties (#7036) |
| 124 | |
| 125 | GML driver: |
| 126 | * fix field type detection logic to avoid a field with xsi:nil=true to be identified as a string (#7027) |
| 127 | * JPGIS FGD v4: fix logic so that coordinate order reported is lon/lat (https://github.com/OSGeo/gdal/pull/241) |
| 128 | |
| 129 | GMLAS driver: |
| 130 | * fix memleak in swe:DataRecord handling |
| 131 | * avoid false-positive warning about attribute found in document but ignored according to configuration, when the attribute is actually not present in the document but has a default value (#6956) |
| 132 | * (quick-and-not-prefect) fix to avoid a <xs:any> to prevent all other fields from being set (#6957) |
| 133 | * get the srsName when set on the srsName of the gml:pos of a gml:Point (#6962) |
| 134 | * CityGML related fixes: better take into account .xsd whose namespace prefix is not in the document, fix discovery of substitution elements, handle gYear data type (#6975) |
| 135 | |
| 136 | GPKG driver: |
| 137 | * fix feature count after SetFeature() with sqlite < 3.7.8 (#6953) |
| 138 | * do not take into account gpkg_contents for the extent of vector layers when it is present but invalid (#6976) |
| 139 | * fix logic to detect FID on SQL result layer when several FID fields are selected (#7026) |
| 140 | |
| 141 | KML / LIBKML drivers: |
| 142 | * read documents with an explicit kml prefix (#6981) |
| 143 | |
| 144 | MSSQLSpatial driver: |
| 145 | * fix issues on x64 (#6930) |
| 146 | * properly format DELETE statement with schema (#7039) |
| 147 | |
| 148 | OCI driver: |
| 149 | * check view with unquoted table name (#5552) |
| 150 | |
| 151 | OpenFileGDB driver: |
| 152 | * properly read GeneralPolygon with M component whose all values are set to NaN (#7017) |
| 153 | |
| 154 | OSM driver: |
| 155 | * increase string buffer for osm XML files (#6964) |
| 156 | |
| 157 | Shapefile driver: |
| 158 | * use VSIStatL() in Create() to properly work with /vsimem/ directories (#6991) |
| 159 | * fix regression affecting GDAL 2.1.3 or later, 2.2.0 or later, when editing the last shape of a file and growing it, and then appending a new shape, which resulted in corruption of both shapes (#7031) |
| 160 | |
| 161 | SQLite/Spatialite driver: |
| 162 | * escape integer primary key column name on table creation (#7007) |
| 163 | |
| 164 | == C# bindings == |
| 165 | |
| 166 | * Implement RasterIO extensions (#6915) |
| 167 | |
| 168 | == Python bindings == |
| 169 | |
| 170 | * fix reference count issue on gdal.VSIStatL() when it returns None, that can cause Python crashes if None refcount drops to zero |
| 171 | * add C-API to create driver instances for use in SWIG (https://trac.osgeo.org/osgeo4w/ticket/466) |
| 172 | |
| 173 | == Security oriented fixes == |
| 174 | |
| 175 | Note: this is only a very partial backport of more extensive fixes done in GDAL trunk. Credit to OSS-Fuzz for all of them. (oss-fuzz#XXXX is a shortcut to |
| 176 | https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=XXXX) |
| 177 | |
| 178 | * NAS: avoid assertion / null ptr deref and possibly other failures on corrupted files. (oss-fuzz#2366, oss-fuzz#2580) |
| 179 | * NTF: avoid null ptr deref. Related to https://oss-fuzz.com/v2/testcase-detail/6527758899347456 |
| 180 | * VSIMemHandle::Read(): avoid unwanted unsigned int overflow that cause a later heap buffer overflow. Fixes https://oss-fuzz.com/v2/testcase-detail/5227283000328192. |
| 181 | * MBTiles: fix use after free. (oss-fuzz#2388) |
| 182 | * netCDF: fix stack buffer overflow when building vector layers from netCDF variables if they don't have the expected number of dimensions. (oss-fuzz#2400) |
| 183 | * DXF: prevent infinite loop / excessive memory allocation on truncated file. (#oss-fuzz#2403) |
| 184 | * DXF: avoid excessive memory allocation. (oss-fuzz#2444) |
| 185 | * XYZ: fix write heap-buffer-overflow (oss-fuzz#2426) |
| 186 | * GTiff: make IGetDataCoverageStatus() properly set the current TIFF directory, and only implement it for 'normal' bands. To avoid heap buffer overflows. (oss-fuzz#2438) |
| 187 | * GTiff: avoid null pointer derefrence when requested implicit overviews on corrupted JPEG-compressed file. (oss-fuzz#2441) |
| 188 | * GTiff: avoid potential issue on corrupted files (oss-fuzz#2481) |
| 189 | * GTiff: don't override member nBlocksPerRow member of GTiffJPEGOverviewBand with unrelated value, in case of single-strip case. (oss-fuzz#3020) |
| 190 | * PCIDSK: for band interleave channel, correctly use pixel_offset in case it is different from pixel_size. (oss-fuzz#2440) |
| 191 | * MITAB: fix skipping of blank lines when reading MIF geometries, and avoid potential very loop loop. Fixes https://oss-fuzz.com/v2/testcase-detail/4516730841858048 |
| 192 | * CPLKeywordParser: avoid potential heap buffer overflow read. (oss-fuzz#2706) |
| 193 | * CPLKeywordParser: avoid potential infinite loop. Fixes https://oss-fuzz.com/v2/testcase-detail/5733173726019584 |
| 194 | * morphFromESRI(): fixes heap-after-free uses. (oss-fuzz#2864) |
| 195 | * OGR_VRT: fix null pointer dereference on GetExtent() on an invalid layer. (oss-fuzz#3017) |
| 196 | * OGR_VRT: avoid crash on cyclic VRT. (oss-fuzz#3123) |
| 197 | * OSM: avoid potential write heap buffer overflow on corrupted PBF files. (oss-fuzz#3022) |
| 198 | * FAST: fix potential read heap buffer overflow. (oss-fuzz#3025) |
| 199 | * CPG: avoid null pointer dereference on failed open. (oss-fuzz#3136) |