summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>1999-07-31 22:44:56 +0000
committerJarkko Hietaniemi <jhi@iki.fi>1999-07-31 22:44:56 +0000
commit893fe2c21345ec73429b2371c33adad8d22fc7f2 (patch)
tree40616f23c0e5583acd35f985de295e3ebf64efdb /util.c
parentd6a287148f674729887096e6af50b42b464c3451 (diff)
downloadperl-893fe2c21345ec73429b2371c33adad8d22fc7f2.tar.gz
Integer overflow iteration.
p4raw-id: //depot/cfgperl@3843
Diffstat (limited to 'util.c')
-rw-r--r--util.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/util.c b/util.c
index 9d35e21c93..918f37b309 100644
--- a/util.c
+++ b/util.c
@@ -2828,7 +2828,11 @@ Perl_scan_bin(pTHX_ char *start, I32 len, I32 *retlen)
}
if (!overflowed)
rnv = (NV) ruv;
- if (rnv > 4294967295.0) {
+ if ( ( overflowed && rnv > 4294967295.0)
+#if UV_SIZEOF > 4
+ || (!overflowed && ruv > 0xffffffff )
+#endif
+ ) {
dTHR;
if (ckWARN(WARN_UNSAFE))
Perl_warner(aTHX_ WARN_UNSAFE,
@@ -2864,7 +2868,7 @@ Perl_scan_oct(pTHX_ char *start, I32 len, I32 *retlen)
}
}
if (!overflowed) {
- register xuv = ruv << 3;
+ register UV xuv = ruv << 3;
if ((xuv >> 3) != ruv) {
dTHR;
@@ -2889,7 +2893,11 @@ Perl_scan_oct(pTHX_ char *start, I32 len, I32 *retlen)
}
if (!overflowed)
rnv = (NV) ruv;
- if (rnv > 4294967295.0) {
+ if ( ( overflowed && rnv > 4294967295.0)
+#if UV_SIZEOF > 4
+ || (!overflowed && ruv > 0xffffffff )
+#endif
+ ) {
dTHR;
if (ckWARN(WARN_UNSAFE))
Perl_warner(aTHX_ WARN_UNSAFE,
@@ -2953,7 +2961,11 @@ Perl_scan_hex(pTHX_ char *start, I32 len, I32 *retlen)
}
if (!overflowed)
rnv = (NV) ruv;
- if (rnv > 4294967295.0) {
+ if ( ( overflowed && rnv > 4294967295.0)
+#if UV_SIZEOF > 4
+ || (!overflowed && ruv > 0xffffffff )
+#endif
+ ) {
dTHR;
if (ckWARN(WARN_UNSAFE))
Perl_warner(aTHX_ WARN_UNSAFE,