Browse Source

catch invalid ld80 bit patterns and treat them as nan

this should not be necessary - the invalid bit patterns cannot be
created except through type punning. however, some broken gnu software
is passing them to printf and triggering dangerous stack-smashing, so
let's catch them anyway...
Rich Felker 13 years ago
parent
commit
f6fd351c70
1 changed files with 2 additions and 2 deletions
  1. 2 2
      src/math/__fpclassifyl.c

+ 2 - 2
src/math/__fpclassifyl.c

@@ -7,10 +7,10 @@ int __fpclassifyl(long double __x)
 	union {
 		long double __ld;
 		__uint16_t __hw[5];
-		__uint64_t __m;
+		__int64_t __m;
 	} __y = { __x };
 	int __ee = __y.__hw[4]&0x7fff;
 	if (!__ee) return __y.__m ? FP_SUBNORMAL : FP_ZERO;
 	if (__ee==0x7fff) return __y.__m ? FP_NAN : FP_INFINITE;
-	return FP_NORMAL;
+	return __y.__m < 0 ? FP_NORMAL : FP_NAN;
 }