From 3e46c7998ce2bf23ec322d1dfe65c8da35621d51 Mon Sep 17 00:00:00 2001 From: James Turner Date: Wed, 24 Jul 2013 08:51:35 +0100 Subject: [PATCH] Additional checks, for waypoint role setting. Added these while investigating a defect, which unfortunately still remains elusive. But the checks are wise anyway. --- src/Navaids/route.cxx | 4 ++++ src/Scripting/NasalPositioned.cxx | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/Navaids/route.cxx b/src/Navaids/route.cxx index 6d6558a69..8d4eb4029 100644 --- a/src/Navaids/route.cxx +++ b/src/Navaids/route.cxx @@ -91,6 +91,10 @@ bool Waypt::flag(WayptFlag aFlag) const void Waypt::setFlag(WayptFlag aFlag, bool aV) { + if (aFlag == 0) { + throw sg_range_exception("invalid waypoint flag set"); + } + _flags = (_flags & ~aFlag); if (aV) _flags |= aFlag; } diff --git a/src/Scripting/NasalPositioned.cxx b/src/Scripting/NasalPositioned.cxx index 9da830f31..fced59bec 100644 --- a/src/Scripting/NasalPositioned.cxx +++ b/src/Scripting/NasalPositioned.cxx @@ -1920,6 +1920,10 @@ static naRef f_createWP(naContext c, naRef me, int argc, naRef* args) // set waypt flags - approach, departure, pseudo, etc if (argc > argOffset) { WayptFlag f = wayptFlagFromString(naStr_data(args[argOffset++])); + if (f == 0) { + naRuntimeError(c, "createWP: bad waypoint role"); + } + wpt->setFlag(f); } @@ -1947,6 +1951,9 @@ static naRef f_createWPFrom(naContext c, naRef me, int argc, naRef* args) // set waypt flags - approach, departure, pseudo, etc if (argc > 1) { WayptFlag f = wayptFlagFromString(naStr_data(args[1])); + if (f == 0) { + naRuntimeError(c, "createWPFrom: bad waypoint role"); + } wpt->setFlag(f); } @@ -2116,6 +2123,10 @@ static naRef f_flightplan_clearWPType(naContext c, naRef me, int argc, naRef* ar } WayptFlag flag = wayptFlagFromString(naStr_data(args[0])); + if (flag == 0) { + naRuntimeError(c, "clearWPType: bad waypoint role"); + } + fp->clearWayptsWithFlag(flag); return naNil(); } -- 2.39.5