Added bounds checking for config file parsing
authorAndreas Tonnesen <andreto@olsr.org>
Sat, 20 Nov 2004 18:46:03 +0000 (18:46 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Sat, 20 Nov 2004 18:46:03 +0000 (18:46 +0000)
src/cfgparser/oparse.y
src/olsr_cfg.h

index 5843593..e643dc7 100644 (file)
@@ -21,7 +21,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: oparse.y,v 1.16 2004/11/20 17:10:03 tlopatic Exp $
+ * $Id: oparse.y,v 1.17 2004/11/20 18:46:03 kattemat Exp $
  *
  */
 
@@ -343,6 +343,11 @@ isetip6multg: TOK_IP6MULTIGLOBAL TOK_IP6_ADDR
 isethelloint: TOK_HELLOINT TOK_FLOAT
 {
     if(PARSER_DEBUG) printf("\tHELLO interval: %0.2f\n", $2->floating);
+    if($2->floating < MIN_INTERVAL)
+      {
+       fprintf(stderr, "%0.2f is not allowed\n", $2->floating);
+       exit(EXIT_FAILURE);
+      }
     cnf->interfaces->cnf->hello_params.emission_interval = $2->floating;
     free($2);
 }
@@ -350,6 +355,11 @@ isethelloint: TOK_HELLOINT TOK_FLOAT
 isethelloval: TOK_HELLOVAL TOK_FLOAT
 {
     if(PARSER_DEBUG) printf("\tHELLO validity: %0.2f\n", $2->floating);
+    if($2->floating < MIN_INTERVAL)
+      {
+       fprintf(stderr, "%0.2f is not allowed\n", $2->floating);
+       exit(EXIT_FAILURE);
+      }
     cnf->interfaces->cnf->hello_params.validity_time = $2->floating;
     free($2);
 }
@@ -357,6 +367,11 @@ isethelloval: TOK_HELLOVAL TOK_FLOAT
 isettcint: TOK_TCINT TOK_FLOAT
 {
     if(PARSER_DEBUG) printf("\tTC interval: %0.2f\n", $2->floating);
+    if($2->floating < MIN_INTERVAL)
+      {
+       fprintf(stderr, "%0.2f is not allowed\n", $2->floating);
+       exit(EXIT_FAILURE);
+      }
     cnf->interfaces->cnf->tc_params.emission_interval = $2->floating;
     free($2);
 }
@@ -364,6 +379,11 @@ isettcint: TOK_TCINT TOK_FLOAT
 isettcval: TOK_TCVAL TOK_FLOAT
 {
     if(PARSER_DEBUG) printf("\tTC validity: %0.2f\n", $2->floating);
+    if($2->floating < MIN_INTERVAL)
+      {
+       fprintf(stderr, "%0.2f is not allowed\n", $2->floating);
+       exit(EXIT_FAILURE);
+      }
     cnf->interfaces->cnf->tc_params.validity_time = $2->floating;
     free($2);
 }
@@ -371,6 +391,11 @@ isettcval: TOK_TCVAL TOK_FLOAT
 isetmidint: TOK_MIDINT TOK_FLOAT
 {
     if(PARSER_DEBUG) printf("\tMID interval: %0.2f\n", $2->floating);
+    if($2->floating < MIN_INTERVAL)
+      {
+       fprintf(stderr, "%0.2f is not allowed\n", $2->floating);
+       exit(EXIT_FAILURE);
+      }
     cnf->interfaces->cnf->mid_params.emission_interval = $2->floating;
     free($2);
 }
@@ -378,6 +403,11 @@ isetmidint: TOK_MIDINT TOK_FLOAT
 isetmidval: TOK_MIDVAL TOK_FLOAT
 {
     if(PARSER_DEBUG) printf("\tMID validity: %0.2f\n", $2->floating);
+    if($2->floating < MIN_INTERVAL)
+      {
+       fprintf(stderr, "%0.2f is not allowed\n", $2->floating);
+       exit(EXIT_FAILURE);
+      }
     cnf->interfaces->cnf->mid_params.validity_time = $2->floating;
     free($2);
 }
@@ -385,6 +415,11 @@ isetmidval: TOK_MIDVAL TOK_FLOAT
 isethnaint: TOK_HNAINT TOK_FLOAT
 {
     if(PARSER_DEBUG) printf("\tHNA interval: %0.2f\n", $2->floating);
+    if($2->floating < MIN_INTERVAL)
+      {
+       fprintf(stderr, "%0.2f is not allowed\n", $2->floating);
+       exit(EXIT_FAILURE);
+      }
     cnf->interfaces->cnf->hna_params.emission_interval = $2->floating;
     free($2);
 }
@@ -392,6 +427,11 @@ isethnaint: TOK_HNAINT TOK_FLOAT
 isethnaval: TOK_HNAVAL TOK_FLOAT
 {
     if(PARSER_DEBUG) printf("\tHNA validity: %0.2f\n", $2->floating);
+    if($2->floating < MIN_INTERVAL)
+      {
+       fprintf(stderr, "%0.2f is not allowed\n", $2->floating);
+       exit(EXIT_FAILURE);
+      }
     cnf->interfaces->cnf->hna_params.validity_time = $2->floating;
     free($2);
 }
@@ -403,6 +443,12 @@ idebug:       TOK_DEBUGLEVEL TOK_INTEGER
 
   cnf->debug_level = $2->integer;
   if(PARSER_DEBUG) printf("Debug level: %d\n", cnf->debug_level);
+    if($2->integer < MIN_DEBUGLVL ||
+       $2->integer > MAX_DEBUGLVL)
+      {
+       fprintf(stderr, "Debuglevel %d is not allowed\n", $2->integer);
+       exit(EXIT_FAILURE);
+      }
 
   free($2);
 }
@@ -540,6 +586,13 @@ bnoint: TOK_NOINT TOK_BOOLEAN
 atos: TOK_TOS TOK_INTEGER
 {
   if(PARSER_DEBUG) printf("TOS: %d\n", $2->integer);
+    if($2->integer < MIN_TOS ||
+       $2->integer > MAX_TOS)
+      {
+       fprintf(stderr, "%d is not allowed\n", $2->integer);
+       exit(EXIT_FAILURE);
+      }
+
   cnf->tos = $2->integer;
 
   free($2);
@@ -552,6 +605,12 @@ awillingness: TOK_WILLINGNESS TOK_INTEGER
   cnf->willingness_auto = OLSR_FALSE;
 
   if(PARSER_DEBUG) printf("Willingness: %d\n", $2->integer);
+    if($2->integer < MIN_WILLINGNESS ||
+       $2->integer > MAX_WILLINGNESS)
+      {
+       fprintf(stderr, "willingness %d is not allowed\n", $2->integer);
+       exit(EXIT_FAILURE);
+      }
   cnf->willingness = $2->integer;
 
   free($2);
@@ -582,6 +641,13 @@ fhystscale: TOK_HYSTSCALE TOK_FLOAT
 {
   cnf->hysteresis_param.scaling = $2->floating;
   if(PARSER_DEBUG) printf("Hysteresis Scaling: %0.2f\n", $2->floating);
+    if($2->floating < MIN_HYST_PARAM ||
+       $2->floating > MAX_HYST_PARAM)
+      {
+       fprintf(stderr, "Hyst scaling %0.2f is not allowed\n", $2->floating);
+       exit(EXIT_FAILURE);
+      }
+
   free($2);
 }
 ;
@@ -591,6 +657,12 @@ fhystupper: TOK_HYSTUPPER TOK_FLOAT
 {
   cnf->hysteresis_param.thr_high = $2->floating;
   if(PARSER_DEBUG) printf("Hysteresis UpperThr: %0.2f\n", $2->floating);
+    if($2->floating < MIN_HYST_PARAM ||
+       $2->floating > MAX_HYST_PARAM)
+      {
+       fprintf(stderr, "Hyst upper thr %0.2f is not allowed\n", $2->floating);
+       exit(EXIT_FAILURE);
+      }
   free($2);
 }
 ;
@@ -600,6 +672,12 @@ fhystlower: TOK_HYSTLOWER TOK_FLOAT
 {
   cnf->hysteresis_param.thr_low = $2->floating;
   if(PARSER_DEBUG) printf("Hysteresis LowerThr: %0.2f\n", $2->floating);
+    if($2->floating < MIN_HYST_PARAM ||
+       $2->floating > MAX_HYST_PARAM)
+      {
+       fprintf(stderr, "Hyst lower thr %0.2f is not allowed\n", $2->floating);
+       exit(EXIT_FAILURE);
+      }
   free($2);
 }
 ;
@@ -607,6 +685,12 @@ fhystlower: TOK_HYSTLOWER TOK_FLOAT
 fpollrate: TOK_POLLRATE TOK_FLOAT
 {
   if(PARSER_DEBUG) printf("Pollrate %0.2f\n", $2->floating);
+    if($2->floating < MIN_POLLRATE ||
+       $2->floating > MAX_POLLRATE)
+      {
+       fprintf(stderr, "Pollrate %0.2f is not allowed\n", $2->floating);
+       exit(EXIT_FAILURE);
+      }
   cnf->pollrate = $2->floating;
 
   free($2);
@@ -617,6 +701,13 @@ fpollrate: TOK_POLLRATE TOK_FLOAT
 atcredundancy: TOK_TCREDUNDANCY TOK_INTEGER
 {
   if(PARSER_DEBUG) printf("TC redundancy %d\n", $2->integer);
+  if($2->integer < MIN_TC_REDUNDANCY ||
+     $2->integer > MAX_TC_REDUNDANCY)
+    {
+      fprintf(stderr, "TC redundancy %d is not allowed\n", $2->integer);
+      exit(EXIT_FAILURE);
+    }
+
   cnf->tc_redundancy = $2->integer;
 
   free($2);
@@ -627,6 +718,13 @@ atcredundancy: TOK_TCREDUNDANCY TOK_INTEGER
 amprcoverage: TOK_MPRCOVERAGE TOK_INTEGER
 {
   if(PARSER_DEBUG) printf("MPR coverage %d\n", $2->integer);
+    if($2->integer < MIN_MPR_COVERAGE ||
+       $2->integer > MAX_MPR_COVERAGE)
+      {
+       fprintf(stderr, "MPR coverage %d is not allowed\n", $2->integer);
+       exit(EXIT_FAILURE);
+      }
+
   cnf->mpr_coverage = $2->integer;
 
   free($2);
index 183a6c7..d6aae7c 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: olsr_cfg.h,v 1.11 2004/11/20 17:37:25 tlopatic Exp $
+ * $Id: olsr_cfg.h,v 1.12 2004/11/20 18:46:03 kattemat Exp $
  *
  */
 
 #define DEF_LQ_WSIZE        10
 #define DEF_CLEAR_SCREEN    OLSR_FALSE
 
+/* Bounds */
+
+#define MIN_INTERVAL        0.01
+
+#define MAX_POLLRATE        10.0
+#define MIN_POLLRATE        0.01
+#define MAX_DEBUGLVL        9
+#define MIN_DEBUGLVL        0
+#define MAX_TOS             16
+#define MIN_TOS             0
+#define MAX_WILLINGNESS     7
+#define MIN_WILLINGNESS     1
+#define MAX_MPR_COVERAGE    20
+#define MIN_MPR_COVERAGE    1
+#define MAX_TC_REDUNDANCY   2
+#define MIN_TC_REDUNDANCY   0
+#define MAX_HYST_PARAM      1.0
+#define MIN_HYST_PARAM      0.0
+
 
 #ifndef IPV6_ADDR_SITELOCAL
 #define IPV6_ADDR_SITELOCAL    0x0040U