mirror of
https://github.com/fluencelabs/musl
synced 2025-05-22 04:01:34 +00:00
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...
This commit is contained in:
parent
e5cb55fedd
commit
f6fd351c70
@ -7,10 +7,10 @@ int __fpclassifyl(long double __x)
|
|||||||
union {
|
union {
|
||||||
long double __ld;
|
long double __ld;
|
||||||
__uint16_t __hw[5];
|
__uint16_t __hw[5];
|
||||||
__uint64_t __m;
|
__int64_t __m;
|
||||||
} __y = { __x };
|
} __y = { __x };
|
||||||
int __ee = __y.__hw[4]&0x7fff;
|
int __ee = __y.__hw[4]&0x7fff;
|
||||||
if (!__ee) return __y.__m ? FP_SUBNORMAL : FP_ZERO;
|
if (!__ee) return __y.__m ? FP_SUBNORMAL : FP_ZERO;
|
||||||
if (__ee==0x7fff) return __y.__m ? FP_NAN : FP_INFINITE;
|
if (__ee==0x7fff) return __y.__m ? FP_NAN : FP_INFINITE;
|
||||||
return FP_NORMAL;
|
return __y.__m < 0 ? FP_NORMAL : FP_NAN;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user