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;