Parcourir la 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 il y a 12 ans
Parent
commit
f8a2430473
1 fichiers modifiés avec 10 ajouts et 2 suppressions
  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_);
         }