summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorMaciej Rzasa <maciejrzasa@gmail.com>2022-11-30 22:38:25 +0100
committergit <svn-admin@ruby-lang.org>2023-02-17 17:46:27 +0000
commit36e3d46d35b6a904533e58809369054b135c33d7 (patch)
treef7bd9cefc8281e5a04feb2e0ab31a9887014dea3 /ext
parent81dc3a1780319f4bc232af407edea60a35d251ed (diff)
downloadruby-36e3d46d35b6a904533e58809369054b135c33d7.tar.gz
[ruby/bigdecimal] Handle correctly #remainder with infinity. Fixes
https://github.com/ruby/bigdecimal/pull/187 https://github.com/ruby/bigdecimal/commit/4b8572d452
Diffstat (limited to 'ext')
-rw-r--r--ext/bigdecimal/bigdecimal.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c
index ce50e780f8..637e824af5 100644
--- a/ext/bigdecimal/bigdecimal.c
+++ b/ext/bigdecimal/bigdecimal.c
@@ -2082,6 +2082,13 @@ BigDecimal_divremain(VALUE self, VALUE r, Real **dv, Real **rv)
if (!b) return DoSomeOne(self, r, rb_intern("remainder"));
SAVE(b);
+ if (VpIsPosInf(b) || VpIsNegInf(b)) {
+ GUARD_OBJ(*dv, NewZeroWrapLimited(1, 1));
+ VpSetZero(*dv, 1);
+ *rv = a;
+ return Qnil;
+ }
+
mx = (a->MaxPrec + b->MaxPrec) *VpBaseFig();
GUARD_OBJ(c, NewZeroWrapLimited(1, mx));
GUARD_OBJ(res, NewZeroWrapNolimit(1, (mx+1) * 2 + (VpBaseFig() + 1)));