Actions
Bug #10453
closedNUM2CHR() does not perform additional bounds checks
    Bug #10453:
    NUM2CHR() does not perform additional bounds checks
  
Description
NUM2CHR() just calls rb_num2int_inline() and masks off the high bytes. Consequently, passing any value larger than a char and no bigger than an int will return some garbage value (rather than raising RangeError).
To reproduce, compile and run:
#include <ruby.h>
#include <limits.h>
int main(int argc, char* argv[])
{
    ruby_init();
    
    VALUE y = INT2FIX(INT_MAX);
    char z = NUM2CHR(y);
    
    printf("%hhd\n", z);
    
    return ruby_cleanup(0);
}
Expected:
Segfault from uncaught RangeError.
Actual:
Prints -1
Files
Actions