[PATCH v2] Fix a couple of obvious 2-byte ASn limits

Faidon Liambotis paravoid at debian.org
Mon Jun 21 14:47:16 UTC 2010


re2dfa's MAX_AS was set to 65535, thus failing on expressions
containing 4-byte ASes, e.g.
    import:         from  AS197121 accept
                    AS197121 AND <^AS197121>;

Additionally, RPSL's RANGE_TOP (which is used as MAX_AS in regexp.cc)
was set to 65535. I couldn't pinpoint an exact problem, but smells like
a bug, hence adjust that to 2^32 too.

Finally, RE_INVALID_AS was an int and set to RANGE_TOP + 1. Make it an
unsigned int and set it to 0, since it's only used for comparison in a
couple of assert() statements.

(v2: use a "u" suffix to denote that the number is unsigned, eliminating
a GCC warning in some versions)
---
 src/re2dfa/re2dfa.h     |    2 +-
 src/re2dfa/regexp_nf.hh |    2 +-
 src/rpsl/rangelist.hh   |    2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/re2dfa/re2dfa.h b/src/re2dfa/re2dfa.h
index e0cfd38..1c4a58c 100644
--- a/src/re2dfa/re2dfa.h
+++ b/src/re2dfa/re2dfa.h
@@ -48,7 +48,7 @@
 
 #include "config.h"
 
-#define MAX_AS 65535
+#define MAX_AS 4294967295u
 
 /*
  * The following is a compile time limit on the number of NFA states
diff --git a/src/re2dfa/regexp_nf.hh b/src/re2dfa/regexp_nf.hh
index e1f7edf..2a7cdab 100644
--- a/src/re2dfa/regexp_nf.hh
+++ b/src/re2dfa/regexp_nf.hh
@@ -55,7 +55,7 @@
 #include "rpsl/rpsl_item.hh"
 
 typedef unsigned int ASt;
-const int RE_INVALID_AS = RANGE_TOP + 1;
+const unsigned int RE_INVALID_AS = 0;
 
 extern "C" {
 #include "re2dfa.h"
diff --git a/src/rpsl/rangelist.hh b/src/rpsl/rangelist.hh
index 5e3f9d8..0ca4b90 100644
--- a/src/rpsl/rangelist.hh
+++ b/src/rpsl/rangelist.hh
@@ -52,7 +52,7 @@
 #include <iostream>
 #include "List.hh"
 
-#define RANGE_TOP 65535
+#define RANGE_TOP 4294967295u
 
 class RangeList {
 friend class regexp_nf;
-- 
1.7.0




More information about the irrtoolset mailing list