From: shibata.hiroshi@... Date: 2014-01-30T06:17:22+00:00 Subject: [ruby-core:60316] [ruby-trunk - Bug #9089] rb_fix2uint no longer raises a RangeError when given negative values Issue #9089 has been updated by Hiroshi SHIBATA. Target version changed from 2.1.0 to current: 2.2.0 ---------------------------------------- Bug #9089: rb_fix2uint no longer raises a RangeError when given negative values https://bugs.ruby-lang.org/issues/9089#change-44807 * Author: Arthur Schreiber * Status: Feedback * Priority: Normal * Assignee: * Category: core * Target version: current: 2.2.0 * ruby -v: ruby 2.1.0dev (2013-11-07 trunk 43560) * Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN ---------------------------------------- Up until the change that was made in (()), (({rb_fix2uint})) would raise a (({RangeError})) if it was given a negative value like (({-1})) (e.g. when using the (({FIX2UINT})) macro). Due to the changes made in that commit, this error is no longer raised and (({rb_fix2uint})) will return an incorrect value instead. There is a C-API spec in rubyspec that shows that this behavior has changed between 2.0.0-p247 and 2.1.0-preview1, and I checked and made sure this is still not working correctly in the latest 2.1.0-dev version. The failing spec can be found at (()), it is part of the "optional" c-api specs. Is there any reason why there is the (({if (num < (unsigned long)INT_MIN)})) is made inside the (({check_uint})) function? Doesn't the (({sign})) parameter automatically indicate that we can't convert to an unsigned integer? -- http://bugs.ruby-lang.org/