From 03d5745da98808881f5299a12e328302b29680fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Mon, 1 Jul 2019 22:53:34 +0200 Subject: [PATCH] Added missing label validity checks --- src/map/IMG/lblfile.cpp | 3 ++- src/map/IMG/rgnfile.cpp | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/map/IMG/lblfile.cpp b/src/map/IMG/lblfile.cpp index 5f797290..4feac22e 100644 --- a/src/map/IMG/lblfile.cpp +++ b/src/map/IMG/lblfile.cpp @@ -168,7 +168,8 @@ Label LBLFile::label(Handle &hdl, quint32 offset, bool poi) quint32 labelOffset; if (poi) { quint32 poiOffset; - if (!(seek(hdl, _poiOffset + offset) && readUInt24(hdl, poiOffset))) + if (!(seek(hdl, _poiOffset + offset) && readUInt24(hdl, poiOffset) + && (poiOffset & 0x3FFFFF))) return QString(); labelOffset = _offset + (poiOffset & 0x3FFFFF) * _multiplier; } else diff --git a/src/map/IMG/rgnfile.cpp b/src/map/IMG/rgnfile.cpp index f8586f38..f2d3c123 100644 --- a/src/map/IMG/rgnfile.cpp +++ b/src/map/IMG/rgnfile.cpp @@ -205,7 +205,8 @@ bool RGNFile::polyObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv, if (lbl && (labelPtr & 0x3FFFFF)) { if (labelPtr & 0x800000) { quint32 lblOff; - if (net && net->lblOffset(netHdl, labelPtr & 0x3FFFFF, lblOff)) + if (net && net->lblOffset(netHdl, labelPtr & 0x3FFFFF, lblOff) + && lblOff) poly.label = lbl->label(lblHdl, lblOff); } else poly.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF); @@ -289,7 +290,7 @@ bool RGNFile::extPolyObjects(const RectC &rect, Handle &hdl, if (subtype & 0x20) { if (!readUInt24(hdl, labelPtr)) return false; - if (lbl) + if (lbl && (labelPtr & 0x3FFFFF)) poly.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF); }