Browse Source

[2764] detect intermediate padding explicitly.

we previously relied on boost rejecting the padding chracter and throwing
an exception; since Boost 1.53 paddding characters are considered valid
and conerted to all-0 bits, so we now have to do it ourselves.  The detection
logic doesn't rely on the new behavior of Boost, so it should be backward
compatible.
JINMEI Tatuya 12 years ago
parent
commit
f8a2430473
1 changed files with 10 additions and 2 deletions
  1. 10 2
      src/lib/util/encode/base_n.cc

+ 10 - 2
src/lib/util/encode/base_n.cc

@@ -203,8 +203,16 @@ public:
             // we can catch and reject this type of invalid input.
             isc_throw(BadValue, "Unexpected end of input in BASE decoder");
         }
-        if (in_pad_) {
-            return (base_zero_code_);
+        if (*base_ == BASE_PADDING_CHAR) {
+            // Padding can only happen at the end of the input string.  We can
+            // detect any violation of this by checking in_pad_, which is
+            // true iff we are on or after the first valid sequence of padding
+            // characters.
+            if (in_pad_) {
+                return (base_zero_code_);
+            } else {
+                isc_throw(BadValue, "Intermediate padding found");
+            }
         } else {
             return (*base_);
         }