Project

General

Profile

Actions

Bug #9089

closed

rb_fix2uint no longer raises a RangeError when given negative values

Added by NoKarma (Arthur Schreiber) over 10 years ago. Updated almost 5 years ago.

Status:
Rejected
Assignee:
-
Target version:
ruby -v:
ruby 2.1.0dev (2013-11-07 trunk 43560)
[ruby-core:58207]

Description

Up until the change that was made in ((URL:https://github.com/ruby/ruby/commit/92f59c6d7937b14bb5eefb052099ef0a3ef3bcd0)), (({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 ((URL:https://github.com/rubyspec/rubyspec/blob/master/optional/capi/fixnum_spec.rb#L16-L18)), 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?

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0