gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r30421 - in gnunet/src: tun util


From: gnunet
Subject: [GNUnet-SVN] r30421 - in gnunet/src: tun util
Date: Sat, 26 Oct 2013 19:20:03 +0200

Author: grothoff
Date: 2013-10-26 19:20:02 +0200 (Sat, 26 Oct 2013)
New Revision: 30421

Modified:
   gnunet/src/tun/regex.c
   gnunet/src/util/strings.c
Log:
-improvements to parsers

Modified: gnunet/src/tun/regex.c
===================================================================
--- gnunet/src/tun/regex.c      2013-10-26 15:17:48 UTC (rev 30420)
+++ gnunet/src/tun/regex.c      2013-10-26 17:20:02 UTC (rev 30421)
@@ -126,7 +126,7 @@
     return ret;
   default:
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "Bad mask: %d\n",
+                _("Bad mask: %d\n"),
                 mask);
     GNUNET_break (0);
     return NULL;
@@ -203,6 +203,8 @@
                      pp->start_port);
     return ret;
   }
+  if (pp->end_port < pp->start_port)
+    return NULL;
   cnt = pp->end_port - pp->start_port + 1;
   if (GNUNET_YES == pp->negate_portrange)
     cnt = 0xFFFF - cnt;
@@ -305,6 +307,11 @@
   if (NULL == reg)
     return NULL;
   pp = port_to_regex (&v4->pp);
+  if (NULL == pp)
+  {
+    GNUNET_free (reg);
+    return NULL;
+  }
   GNUNET_asprintf (&ret,
                    "4-%s-%s",
                    pp, reg);
@@ -333,6 +340,11 @@
   if (NULL == reg)
     return NULL;
   pp = port_to_regex (&v6->pp);
+  if (NULL == pp)
+  {
+    GNUNET_free (reg);
+    return NULL;
+  }
   GNUNET_asprintf (&ret,
                    "6-%s-%s",
                    pp, reg);
@@ -364,7 +376,7 @@
   if (NULL == np)
     return NULL;
   reg = NULL;
-  for (i=0; 0 != np[i].network.s_addr; i++)
+  for (i=0; (0 == i) || (0 != np[i].network.s_addr); i++)
   {
     line = ipv4_to_regex (&np[i]);
     if (NULL == line)
@@ -385,6 +397,8 @@
       GNUNET_free (line);
       reg = tmp;
     }
+    if (0 == np[i].network.s_addr)
+      break;
   }
   return reg;
 }
@@ -414,7 +428,7 @@
     return NULL;
   reg = NULL;
   memset (&zero, 0, sizeof (struct in6_addr));
-  for (i=0; 0 != memcmp (&zero, &np[i].network, sizeof (struct in6_addr)); i++)
+  for (i=0; (0 == i) || (0 != memcmp (&zero, &np[i].network, sizeof (struct 
in6_addr))); i++)
   {
     line = ipv6_to_regex (&np[i]);
     if (NULL == line)
@@ -435,6 +449,8 @@
       GNUNET_free (line);
       reg = tmp;
     }
+    if (0 == memcmp (&zero, &np[i].network, sizeof (struct in6_addr)))
+      break;
   }
   return reg;
 }

Modified: gnunet/src/util/strings.c
===================================================================
--- gnunet/src/util/strings.c   2013-10-26 15:17:48 UTC (rev 30420)
+++ gnunet/src/util/strings.c   2013-10-26 17:20:02 UTC (rev 30421)
@@ -1354,6 +1354,7 @@
   const char *pos;
   int s;
   int e;
+  char eol[2];
 
   pos = port_policy;
   if ('!' == *pos)
@@ -1362,17 +1363,35 @@
     pos++;
   }
   if (2 == sscanf (pos,
-                   "%u-%u",
-                   &s, &e))
+                   "%u-%u%1s",
+                   &s, &e, eol))
   {
+    if ( (0 == s) ||
+         (s > 0xFFFF) ||
+         (e < s) ||
+         (e > 0xFFFF) )
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  _("Port not in range\n"));
+      return GNUNET_SYSERR;
+    }
     pp->start_port = (uint16_t) s;
     pp->end_port = (uint16_t) e;
     return GNUNET_OK;
   }
   if (1 == sscanf (pos,
-                   "%u",
-                   &s))
+                   "%u%1s",
+                   &s,
+                   eol))
   {
+    if ( (0 == s) ||
+         (s > 0xFFFF) )
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  _("Port not in range\n"));
+      return GNUNET_SYSERR;
+    }
+
     pp->start_port = (uint16_t) s;
     pp->end_port = (uint16_t) s;
     return GNUNET_OK;
@@ -1571,8 +1590,8 @@
   if (pos < strlen (routeList))
   {
     LOG (GNUNET_ERROR_TYPE_ERROR,
-         _("Invalid format for IP: `%s'\n"),
-         &routeList[pos]);
+         _("Invalid format: `%s'\n"),
+         &routeListX[pos]);
     GNUNET_free (result);
     GNUNET_free (routeList);
     return NULL;                /* oops */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]