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 --- configure.in | 1 - math.c | 8 +++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/configure.in b/configure.in index 76eb9accec..1ca8d142ac 100644 --- a/configure.in +++ b/configure.in @@ -1317,7 +1317,6 @@ main() ac_cv_func___builtin_setjmp=no ac_cv_func_round=no ]) - ac_cv_func_tgamma=no AC_CHECK_TYPE([NET_LUID], [], [], [@%:@include @%:@include ]) 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.3