summaryrefslogtreecommitdiff
path: root/pp_pack.c
diff options
context:
space:
mode:
Diffstat (limited to 'pp_pack.c')
-rw-r--r--pp_pack.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/pp_pack.c b/pp_pack.c
index ad4f186bf9..9ed8c59714 100644
--- a/pp_pack.c
+++ b/pp_pack.c
@@ -2719,7 +2719,10 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist )
afloat = -FLT_MAX;
else afloat = (float)anv;
# else
- afloat = (float)anv;
+ /* a simple cast to float is undefined if outside
+ * the range of values that can be represented */
+ afloat = (float)(anv > FLT_MAX ? NV_INF :
+ anv < -FLT_MAX ? -NV_INF : anv);
# endif
PUSH_VAR(utf8, cur, afloat, needs_swap);
}