From b8fc8cf9b66455ae5b1e22db9de59ea3791c890a Mon Sep 17 00:00:00 2001 From: cremno Date: Sun, 31 Aug 2014 09:31:18 +0200 Subject: [PATCH] fix Bitmap's object to string conversion Calling #to_s might not return a string (it should though). --- binding-mri/bitmap-binding.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/binding-mri/bitmap-binding.cpp b/binding-mri/bitmap-binding.cpp index 1461e74..a49d3e5 100644 --- a/binding-mri/bitmap-binding.cpp +++ b/binding-mri/bitmap-binding.cpp @@ -29,6 +29,12 @@ DEF_TYPE(Bitmap); +static const char *objAsStringPtr(VALUE obj) +{ + VALUE str = rb_obj_as_string(obj); + return RSTRING_PTR(str); +} + void bitmapInitProps(Bitmap *b, VALUE self) { /* Wrap properties */ @@ -258,10 +264,7 @@ RB_METHOD(bitmapDrawText) VALUE strObj; rb_get_args(argc, argv, "oo|i", &rectObj, &strObj, &align RB_ARG_END); - if (!RB_TYPE_P(strObj, RUBY_T_STRING)) - strObj = rb_funcallv(strObj, rb_intern("to_s"), 0, 0); - - str = RSTRING_PTR(strObj); + str = objAsStringPtr(strObj); } else { @@ -281,10 +284,7 @@ RB_METHOD(bitmapDrawText) VALUE strObj; rb_get_args(argc, argv, "iiiio|i", &x, &y, &width, &height, &strObj, &align RB_ARG_END); - if (!RB_TYPE_P(strObj, RUBY_T_STRING)) - strObj = rb_funcallv(strObj, rb_intern("to_s"), 0, 0); - - str = RSTRING_PTR(strObj); + str = objAsStringPtr(strObj); } else { @@ -308,10 +308,7 @@ RB_METHOD(bitmapTextSize) VALUE strObj; rb_get_args(argc, argv, "o", &strObj RB_ARG_END); - if (!RB_TYPE_P(strObj, RUBY_T_STRING)) - strObj = rb_funcallv(strObj, rb_intern("to_s"), 0, 0); - - str = RSTRING_PTR(strObj); + str = objAsStringPtr(strObj); } else {