From 0b3f5c363090123b025b8084419e242e1c2ebe8f Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 28 Dec 2019 23:46:49 +0300 Subject: Fix reading water level from rsw version 2.2+ --- src/plugins/mapcache.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/plugins') diff --git a/src/plugins/mapcache.c b/src/plugins/mapcache.c index 5e44492f6..208f39abb 100644 --- a/src/plugins/mapcache.c +++ b/src/plugins/mapcache.c @@ -281,7 +281,28 @@ bool mapcache_cache_map(const char *mapname) if (rsw == NULL) { water_height = NO_WATER; } else { - water_height = (int)GetFloat(rsw + 166); + if (memcmp(rsw, "GRSW", 4) != 0) { + ShowError("mapcache_cache_map: file %s is not in rsw format\n", filepath); + aFree(rsw); + return false; + } + int major_version = rsw[4]; + int minor_version = rsw[5]; + if (major_version > 2 || (major_version == 2 && minor_version > 2)) { + ShowError("mapcache_cache_map: Unsupported version %d.%d for rsw file %s\n", major_version, minor_version, filepath); + aFree(rsw); + return false; + } + if (major_version < 1 || (major_version == 1 && minor_version <= 4)) { + ShowError("mapcache_cache_map: Unsupported version %d.%d for rsw file %s\n", major_version, minor_version, filepath); + aFree(rsw); + return false; + } + int offset = 166; + if (major_version == 2 && minor_version >= 2) { + offset = 167; + } + water_height = (int)GetFloat(rsw + offset); aFree(rsw); } -- cgit v1.2.3-70-g09d2