PB_CONVERT_DOUBLE_FLOAT: fix handling of varying NaN representations (#543)
diff --git a/pb_decode.c b/pb_decode.c
index f936412..d4ad5a3 100644
--- a/pb_decode.c
+++ b/pb_decode.c
@@ -1692,37 +1692,41 @@
     {
         /* Special value */
         exponent = 128;
-    }
-    else if (exponent > 127)
-    {
-        /* Too large, convert to infinity */
-        exponent = 128;
-        mantissa = 0;
-    }
-    else if (exponent < -150)
-    {
-        /* Too small, convert to zero */
-        exponent = -127;
-        mantissa = 0;
-    }
-    else if (exponent < -126)
-    {
-        /* Denormalized */
-        mantissa |= 0x1000000;
-        mantissa >>= (-126 - exponent);
-        exponent = -127;
-    }
-
-    /* Round off mantissa */
-    mantissa = (mantissa + 1) >> 1;
-
-    /* Check if mantissa went over 2.0 */
-    if (mantissa & 0x800000)
-    {
-        exponent += 1;
-        mantissa &= 0x7FFFFF;
         mantissa >>= 1;
     }
+    else
+    {
+        if (exponent > 127)
+        {
+            /* Too large, convert to infinity */
+            exponent = 128;
+            mantissa = 0;
+        }
+        else if (exponent < -150)
+        {
+            /* Too small, convert to zero */
+            exponent = -127;
+            mantissa = 0;
+        }
+        else if (exponent < -126)
+        {
+            /* Denormalized */
+            mantissa |= 0x1000000;
+            mantissa >>= (-126 - exponent);
+            exponent = -127;
+        }
+
+        /* Round off mantissa */
+        mantissa = (mantissa + 1) >> 1;
+
+        /* Check if mantissa went over 2.0 */
+        if (mantissa & 0x800000)
+        {
+            exponent += 1;
+            mantissa &= 0x7FFFFF;
+            mantissa >>= 1;
+        }
+    }
 
     /* Combine fields */
     out.i = mantissa;