From 70b401e618341601bb80edc90daa5fe4579ad5bf Mon Sep 17 00:00:00 2001 From: elad Date: Sat, 7 Oct 2006 18:29:02 +0000 Subject: Input validation, from David A. Holland on #NetBSD-code --- atc/input.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'atc') diff --git a/atc/input.c b/atc/input.c index 2eef9053..44310133 100644 --- a/atc/input.c +++ b/atc/input.c @@ -1,4 +1,4 @@ -/* $NetBSD: input.c,v 1.20 2006/06/07 09:24:26 jnemeth Exp $ */ +/* $NetBSD: input.c,v 1.21 2006/10/07 18:29:02 elad Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -46,7 +46,7 @@ #if 0 static char sccsid[] = "@(#)input.c 8.1 (Berkeley) 5/31/93"; #else -__RCSID("$NetBSD: input.c,v 1.20 2006/06/07 09:24:26 jnemeth Exp $"); +__RCSID("$NetBSD: input.c,v 1.21 2006/10/07 18:29:02 elad Exp $"); #endif #endif /* not lint */ @@ -517,28 +517,40 @@ descend(int c __attribute__((__unused__))) const char * setalt(int c) { - if ((p.altitude == c - '0') && (p.new_altitude == p.altitude)) + int newalt = c - '0'; + if ((p.altitude == newalt) && (p.new_altitude == p.altitude)) return ("Already at that altitude"); - p.new_altitude = c - '0'; + if (p.new_altitude == newalt) { + return ("Already going to that altitude"); + } + p.new_altitude = newalt; return (NULL); } const char * setrelalt(int c) { + int newalt; + if (c == 0) return ("altitude not changed"); switch (dir) { case D_UP: - p.new_altitude = p.altitude + c - '0'; + newalt = p.altitude + c - '0'; break; case D_DOWN: - p.new_altitude = p.altitude - (c - '0'); + newalt = p.altitude - (c - '0'); break; default: return ("Unknown case in setrelalt! Get help!"); } + + if (p.new_altitude == newalt) + return ("Already going to that altitude"); + + p.new_altitude = newalt; + if (p.new_altitude < 0) return ("Altitude would be too low"); else if (p.new_altitude > 9) -- cgit v1.2.3-56-ge451