diff options
author | Christian Grothoff <christian@grothoff.org> | 2013-10-26 17:20:02 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2013-10-26 17:20:02 +0000 |
commit | 84b11c83de28c606157a210e679f3519a41921b9 (patch) | |
tree | a2893eee89ff2d3731cdcd13edb030f22b1c9fbc /src/tun | |
parent | 5272b27b9373a21884fde643a7d582df6b3b421b (diff) | |
download | gnunet-84b11c83de28c606157a210e679f3519a41921b9.tar.gz gnunet-84b11c83de28c606157a210e679f3519a41921b9.zip |
-improvements to parsers
Diffstat (limited to 'src/tun')
-rw-r--r-- | src/tun/regex.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/tun/regex.c b/src/tun/regex.c index 478132f4e..5baad60ee 100644 --- a/src/tun/regex.c +++ b/src/tun/regex.c | |||
@@ -126,7 +126,7 @@ nibble_to_regex (uint8_t value, | |||
126 | return ret; | 126 | return ret; |
127 | default: | 127 | default: |
128 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 128 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, |
129 | "Bad mask: %d\n", | 129 | _("Bad mask: %d\n"), |
130 | mask); | 130 | mask); |
131 | GNUNET_break (0); | 131 | GNUNET_break (0); |
132 | return NULL; | 132 | return NULL; |
@@ -203,6 +203,8 @@ port_to_regex (const struct GNUNET_STRINGS_PortPolicy *pp) | |||
203 | pp->start_port); | 203 | pp->start_port); |
204 | return ret; | 204 | return ret; |
205 | } | 205 | } |
206 | if (pp->end_port < pp->start_port) | ||
207 | return NULL; | ||
206 | cnt = pp->end_port - pp->start_port + 1; | 208 | cnt = pp->end_port - pp->start_port + 1; |
207 | if (GNUNET_YES == pp->negate_portrange) | 209 | if (GNUNET_YES == pp->negate_portrange) |
208 | cnt = 0xFFFF - cnt; | 210 | cnt = 0xFFFF - cnt; |
@@ -305,6 +307,11 @@ ipv4_to_regex (const struct GNUNET_STRINGS_IPv4NetworkPolicy *v4) | |||
305 | if (NULL == reg) | 307 | if (NULL == reg) |
306 | return NULL; | 308 | return NULL; |
307 | pp = port_to_regex (&v4->pp); | 309 | pp = port_to_regex (&v4->pp); |
310 | if (NULL == pp) | ||
311 | { | ||
312 | GNUNET_free (reg); | ||
313 | return NULL; | ||
314 | } | ||
308 | GNUNET_asprintf (&ret, | 315 | GNUNET_asprintf (&ret, |
309 | "4-%s-%s", | 316 | "4-%s-%s", |
310 | pp, reg); | 317 | pp, reg); |
@@ -333,6 +340,11 @@ ipv6_to_regex (const struct GNUNET_STRINGS_IPv6NetworkPolicy *v6) | |||
333 | if (NULL == reg) | 340 | if (NULL == reg) |
334 | return NULL; | 341 | return NULL; |
335 | pp = port_to_regex (&v6->pp); | 342 | pp = port_to_regex (&v6->pp); |
343 | if (NULL == pp) | ||
344 | { | ||
345 | GNUNET_free (reg); | ||
346 | return NULL; | ||
347 | } | ||
336 | GNUNET_asprintf (&ret, | 348 | GNUNET_asprintf (&ret, |
337 | "6-%s-%s", | 349 | "6-%s-%s", |
338 | pp, reg); | 350 | pp, reg); |
@@ -364,7 +376,7 @@ GNUNET_TUN_ipv4policy2regex (const char *policy) | |||
364 | if (NULL == np) | 376 | if (NULL == np) |
365 | return NULL; | 377 | return NULL; |
366 | reg = NULL; | 378 | reg = NULL; |
367 | for (i=0; 0 != np[i].network.s_addr; i++) | 379 | for (i=0; (0 == i) || (0 != np[i].network.s_addr); i++) |
368 | { | 380 | { |
369 | line = ipv4_to_regex (&np[i]); | 381 | line = ipv4_to_regex (&np[i]); |
370 | if (NULL == line) | 382 | if (NULL == line) |
@@ -385,6 +397,8 @@ GNUNET_TUN_ipv4policy2regex (const char *policy) | |||
385 | GNUNET_free (line); | 397 | GNUNET_free (line); |
386 | reg = tmp; | 398 | reg = tmp; |
387 | } | 399 | } |
400 | if (0 == np[i].network.s_addr) | ||
401 | break; | ||
388 | } | 402 | } |
389 | return reg; | 403 | return reg; |
390 | } | 404 | } |
@@ -414,7 +428,7 @@ GNUNET_TUN_ipv6policy2regex (const char *policy) | |||
414 | return NULL; | 428 | return NULL; |
415 | reg = NULL; | 429 | reg = NULL; |
416 | memset (&zero, 0, sizeof (struct in6_addr)); | 430 | memset (&zero, 0, sizeof (struct in6_addr)); |
417 | for (i=0; 0 != memcmp (&zero, &np[i].network, sizeof (struct in6_addr)); i++) | 431 | for (i=0; (0 == i) || (0 != memcmp (&zero, &np[i].network, sizeof (struct in6_addr))); i++) |
418 | { | 432 | { |
419 | line = ipv6_to_regex (&np[i]); | 433 | line = ipv6_to_regex (&np[i]); |
420 | if (NULL == line) | 434 | if (NULL == line) |
@@ -435,6 +449,8 @@ GNUNET_TUN_ipv6policy2regex (const char *policy) | |||
435 | GNUNET_free (line); | 449 | GNUNET_free (line); |
436 | reg = tmp; | 450 | reg = tmp; |
437 | } | 451 | } |
452 | if (0 == memcmp (&zero, &np[i].network, sizeof (struct in6_addr))) | ||
453 | break; | ||
438 | } | 454 | } |
439 | return reg; | 455 | return reg; |
440 | } | 456 | } |