From 6957898ad0132e92d544e20a981de18b9e815907 Mon Sep 17 00:00:00 2001 From: usa Date: Tue, 22 Mar 2016 01:37:01 +0000 Subject: * time.c (wdiv, wmod): wdivmod0() assumes the 3rd and the 4th arguments are valid pointers. maybe checking them in wdivmod0() is better manner, but I guess that passing real dummy pointers may be faster than checking and branching in wdivmod0(). this commit fixes SEGV on 32bit and LLP64 platforms. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54225 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 9 +++++++++ time.c | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index b8e1467819..9028a2e533 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Tue Mar 22 10:31:34 2016 NAKAMURA Usaku + + * time.c (wdiv, wmod): wdivmod0() assumes the 3rd and the 4th arguments + are valid pointers. + maybe checking them in wdivmod0() is better manner, but I guess that + passing real dummy pointers may be faster than checking and branching + in wdivmod0(). + this commit fixes SEGV on 32bit and LLP64 platforms. + Tue Mar 22 10:24:04 2016 NAKAMURA Usaku * time.c (divmodv): void function never returns any value. diff --git a/time.c b/time.c index 2b37bdef71..11602bf8cc 100644 --- a/time.c +++ b/time.c @@ -461,8 +461,8 @@ static wideval_t wdiv(wideval_t wx, wideval_t wy) { #if WIDEVALUE_IS_WIDER - wideval_t q; - if (wdivmod0(wx, wy, &q, NULL)) return q; + wideval_t q, dmy; + if (wdivmod0(wx, wy, &q, &dmy)) return q; #endif return v2w(div(w2v(wx), w2v(wy))); } @@ -471,8 +471,8 @@ static wideval_t wmod(wideval_t wx, wideval_t wy) { #if WIDEVALUE_IS_WIDER - wideval_t r; - if (wdivmod0(wx, wy, NULL, &r)) return r; + wideval_t r, dmy; + if (wdivmod0(wx, wy, &dmy, &r)) return r; #endif return v2w(mod(w2v(wx), w2v(wy))); } -- cgit v1.2.3