gateway: fix deserialisation of 0 in deserialize_gw_speed
authorFerry Huberts <ferry.huberts@pelagic.nl>
Wed, 25 Jul 2012 19:17:35 +0000 (21:17 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Wed, 25 Jul 2012 19:24:25 +0000 (21:24 +0200)
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
src/gateway.c

index bb97cbb..4239744 100644 (file)
@@ -70,8 +70,17 @@ static bool v6gw_choosen_external;
  */
 static uint32_t
 deserialize_gw_speed(uint8_t value) {
-  uint32_t speed = (value >> 3)+1;
-  uint32_t exp = value & 7;
+  uint32_t speed;
+  uint32_t exp;
+
+  if (!value) {
+    /* 0 and 1 alias onto 0 during serialisation. We take 0 here to mean 0 and
+     * not 1 (since a bandwidth of 1 is no bandwidth at all really) */
+    return 0;
+  }
+
+  speed = (value >> 3)+1;
+  exp = value & 7;
 
   while (exp-- > 0) {
     speed *= 10;