From 1a4a536247c3542ed13fd823026066a5149e40ef Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 13 May 2017 00:50:20 +0000 Subject: math.c: check argument to tgamma * math.c (math_gamma): check the argument before calling math function `tgamma` for edge cases. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58697 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- math.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'math.c') diff --git a/math.c b/math.c index 570776baef..6a55966c49 100644 --- a/math.c +++ b/math.c @@ -869,7 +869,13 @@ math_gamma(VALUE unused_obj, VALUE x) double d; d = Get_Double(x); /* check for domain error */ - if (isinf(d) && signbit(d)) domain_error("gamma"); + if (isinf(d)) { + if (signbit(d)) domain_error("gamma"); + return DBL2NUM(INFINITY); + } + if (d == 0.0) { + return signbit(d) ? DBL2NUM(-INFINITY) : DBL2NUM(INFINITY); + } if (d == floor(d)) { if (d < 0.0) domain_error("gamma"); if (1.0 <= d && d <= (double)NFACT_TABLE) { -- cgit v1.2.1