aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--numeric.c11
2 files changed, 15 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index e0da0e0336..1cc19899de 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sun Oct 2 02:03:06 2016 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (rb_fix2str): detect unnormalized Fixnum value.
+
Sat Oct 1 23:08:47 2016 NAKAMURA Usaku <usa@ruby-lang.org>
* ext/date/date_parse.c (date_zone_to_diff): it's nonsence and really
diff --git a/numeric.c b/numeric.c
index 770c471672..70982185b3 100644
--- a/numeric.c
+++ b/numeric.c
@@ -3267,6 +3267,17 @@ rb_fix2str(VALUE x, int base)
if (base < 2 || 36 < base) {
rb_raise(rb_eArgError, "invalid radix %d", base);
}
+#if SIZEOF_LONG < SIZEOF_VOIDP
+# if SIZEOF_VOIDP == SIZEOF_LONG_LONG
+ if ((val >= 0 && (x & 0xFFFFFFFF00000000ull)) ||
+ (val < 0 && (x & 0xFFFFFFFF00000000ull) != 0xFFFFFFFF00000000ull)) {
+ rb_bug("Unnormalized Fixnum value %p", x);
+ }
+# elif
+ /* should do something like above code, but currently ruby does not know */
+ /* such platforms */
+# endif
+#endif
if (val == 0) {
return rb_usascii_str_new2("0");
}