summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'string.c')
-rw-r--r--string.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/string.c b/string.c
index d28b2da2e1..6482e32c51 100644
--- a/string.c
+++ b/string.c
@@ -682,12 +682,15 @@ rb_str_resize(VALUE str, long len)
rb_str_modify(str);
if (len != RSTRING_LEN(str)) {
if (STR_EMBED_P(str)) {
+ char *ptr;
if (len <= RSTRING_EMBED_LEN_MAX) {
STR_SET_EMBED_LEN(str, len);
RSTRING_PTR(str)[len] = '\0';
return str;
}
- RSTRING(str)->as.heap.ptr = ALLOC_N(char,len+1);
+ ptr = ALLOC_N(char,len+1);
+ MEMCPY(ptr, RSTRING(str)->ary, char, RSTRING_LEN(str));
+ RSTRING(str)->as.heap.ptr = ptr;
STR_SET_NOEMBED(str);
}
else if (RSTRING_LEN(str) < len || RSTRING_LEN(str) - len > 1024) {
@@ -4165,7 +4168,7 @@ rb_str_ord(VALUE s)
if (RSTRING_LEN(s) != 1) {
rb_raise(rb_eTypeError,
- "expacted a characer, but string of size %d given",
+ "expacted a characer, but string of size %ld given",
RSTRING_LEN(s));
}
c = RSTRING_PTR(s)[0] & 0xff;