diff --git a/ext/json/ext/fbuffer/fbuffer.h b/ext/json/ext/fbuffer/fbuffer.h index 752d153b..8ce029a8 100644 --- a/ext/json/ext/fbuffer/fbuffer.h +++ b/ext/json/ext/fbuffer/fbuffer.h @@ -161,23 +161,25 @@ static inline void fbuffer_append_reserved_char(FBuffer *fb, char chr) static void fbuffer_append_str(FBuffer *fb, VALUE str) { - const char *newstr = StringValuePtr(str); - unsigned long len = RSTRING_LEN(str); + const char *ptr; + unsigned long len; + RSTRING_GETMEM(str, ptr, len); - fbuffer_append(fb, newstr, len); + fbuffer_append(fb, ptr, len); } static void fbuffer_append_str_repeat(FBuffer *fb, VALUE str, size_t repeat) { - const char *newstr = StringValuePtr(str); - unsigned long len = RSTRING_LEN(str); + const char *ptr; + unsigned long len; + RSTRING_GETMEM(str, ptr, len); fbuffer_inc_capa(fb, repeat * len); while (repeat) { #if JSON_DEBUG fb->requested = len; #endif - fbuffer_append_reserved(fb, newstr, len); + fbuffer_append_reserved(fb, ptr, len); repeat--; } } diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c index dbba99c4..4cbe43a3 100644 --- a/ext/json/ext/generator/generator.c +++ b/ext/json/ext/generator/generator.c @@ -1374,7 +1374,7 @@ static void generate_json_fixnum(FBuffer *buffer, struct generate_json_data *dat static void generate_json_bignum(FBuffer *buffer, struct generate_json_data *data, VALUE obj) { VALUE tmp = rb_funcall(obj, i_to_s, 0); - fbuffer_append_str(buffer, tmp); + fbuffer_append_str(buffer, StringValue(tmp)); } #ifdef RUBY_INTEGER_UNIFICATION