From: Rich Felker Date: Thu, 30 Jun 2011 20:31:43 +0000 (-0400) Subject: catch invalid ld80 bit patterns and treat them as nan X-Git-Tag: v0.7.12~6 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=f6fd351c703a2843959b3be83078d9dce33f30f3;p=oweals%2Fmusl.git 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... --- diff --git a/src/math/__fpclassifyl.c b/src/math/__fpclassifyl.c index 4f93bef1..4f4f37a7 100644 --- a/src/math/__fpclassifyl.c +++ b/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; }