diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2014-09-21 16:17:06 -0400 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2014-09-21 16:20:25 -0400 |
commit | 42262fd376c1e577f7a3a11ba0a606c6a3de1567 (patch) | |
tree | 6b2b49373ce2b4b4fb71880183011d334729cba9 /pp_pack.c | |
parent | 7e234f81b6d7325dd91edae7737f9bd69a91fc73 (diff) | |
download | perl-42262fd376c1e577f7a3a11ba0a606c6a3de1567.tar.gz |
Comments on unpack 'D' and long doubles formats.
Diffstat (limited to 'pp_pack.c')
-rw-r--r-- | pp_pack.c | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -1698,6 +1698,18 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c ld_bytes aldouble; SHIFT_BYTES(utf8, s, strend, aldouble.bytes, sizeof(aldouble.bytes), datumtype, needs_swap); + /* The most common long double format, the x86 80-bit + * extended precision, has either 2 or 6 unused bytes, + * which may contain garbage, which may contain + * unintentional data. While we do zero the bytes of + * the long double data in pack(), here in unpack() we + * don't, because it's really hard to envision that + * reading the long double off aldouble would be + * affected the unused bytes. + * + * Note that trying to unpack 'long doubles' of 'long + * doubles' packed in another system is in the general + * case doomed without having more detail. */ if (!checksum) mPUSHn(aldouble.ld); else |