From 2331d430d057d4e3a1441d190809647bf2a0b2b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauren=C8=9Biu=20Nicola?= Date: Fri, 2 Sep 2022 19:02:43 +0300 Subject: [PATCH] Fix dimensions getter when no dimensions are available --- CHANGES.md | 6 +++++- src/raster/mdarray.rs | 18 ++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index da3b4e9c9..9525024cb 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,10 +2,14 @@ ## Unreleased -- Added new content to README.md and root rust docs. +- Added new content to `README.md` and the root docs. - +- Fixed a crash in `Group::dimensions` and `MDArray::dimensions` when no dimensions exist + + - + ## 0.13 - Add prebuild bindings for GDAL 3.5 diff --git a/src/raster/mdarray.rs b/src/raster/mdarray.rs index be98d64f8..cff58f66a 100644 --- a/src/raster/mdarray.rs +++ b/src/raster/mdarray.rs @@ -103,9 +103,12 @@ impl<'a> MDArray<'a> { let c_dimensions = unsafe { GDALMDArrayGetDimensions(self.c_mdarray, &mut num_dimensions) }; - // `num_dimensions` is `0`, we can safely return an empty vector - // `GDALMDArrayGetDimensions` does not state that errors can occur - if num_dimensions > 0 && c_dimensions.is_null() { + // If `num_dimensions` is `0`, we can safely return an empty vector. + // `GDALMDArrayGetDimensions` does not state that errors can occur. + if num_dimensions == 0 { + return Ok(Vec::new()); + } + if c_dimensions.is_null() { return Err(_last_null_pointer_err("GDALMDArrayGetDimensions")); } @@ -532,9 +535,12 @@ impl<'a> Group<'a> { let c_dimensions = GDALGroupGetDimensions(self.c_group, &mut num_dimensions, options.as_ptr()); - // `num_dimensions` is `0`, we can safely return an empty vector - // `GDALGroupGetDimensions` does not state that errors can occur - if num_dimensions > 0 && c_dimensions.is_null() { + // If `num_dimensions` is `0`, we can safely return an empty vector. + // `GDALGroupGetDimensions` does not state that errors can occur. + if num_dimensions == 0 { + return Ok(Vec::new()); + } + if c_dimensions.is_null() { return Err(_last_null_pointer_err("GDALGroupGetDimensions")); }