]> git.pond.sub.org Git - empserver/commitdiff
(putvec): Saturate and log error on underflow/overflow, don't just
authorMarkus Armbruster <armbru@pond.sub.org>
Fri, 5 Mar 2004 07:59:29 +0000 (07:59 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Fri, 5 Mar 2004 07:59:29 +0000 (07:59 +0000)
truncate.

src/lib/common/getvar.c

index 8434389f4e266d49880b1e9b46c7f1c7ef16e058..c1b30ba74cb91b3f62ffc587cfce6d53205fda95 100644 (file)
@@ -31,6 +31,7 @@
  *     Dave Pare, 1989
  */
 
+#include <limits.h>
 #include "misc.h"
 #include "var.h"
 #include "file.h"
@@ -64,8 +65,16 @@ putvec(int class, int *vec, s_char *sp, int ptype)
        return 0;
     }
 
-    for (i = 0; i <= I_MAX; ++i)
-       dst[i] = vec[i];
+    for (i = 0; i <= I_MAX; ++i) {
+       if (vec[i] < 0) {
+           logerror("putvec: item %d underflow", i);
+           dst[i] = 0;
+       } else if (vec[i] > SHRT_MAX) {
+           logerror("putvec: item %d overflow", i);
+           dst[i] = SHRT_MAX;
+       } else
+           dst[i] = vec[i];
+    }
 
     return I_MAX;
 }