summaryrefslogtreecommitdiffhomepage
path: root/src/class.c
diff options
context:
space:
mode:
authorh2so5 <[email protected]>2013-08-24 06:49:58 +0900
committerh2so5 <[email protected]>2013-08-24 06:52:46 +0900
commit23df879a81161a0b87721f422ca7e68f63f6746e (patch)
tree75e0d14f451b8b4ccbdda6f2b057a01ae701f4a3 /src/class.c
parentaa099f7f7d1f8c61db936fb7c39a3c734175af16 (diff)
downloadmruby-23df879a81161a0b87721f422ca7e68f63f6746e.tar.gz
mruby-23df879a81161a0b87721f422ca7e68f63f6746e.zip
Fix a problem of 'z' option and shared string
Diffstat (limited to 'src/class.c')
-rw-r--r--src/class.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/class.c b/src/class.c
index b5c561d06..df034737e 100644
--- a/src/class.c
+++ b/src/class.c
@@ -489,14 +489,19 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
mrb_value ss;
struct RString *s;
char **ps;
+ mrb_int len;
ps = va_arg(ap, char**);
if (i < argc) {
ss = to_str(mrb, *sp++);
s = mrb_str_ptr(ss);
- if ((mrb_int)strlen(s->ptr) < s->len) {
+ len = (mrb_int)strlen(s->ptr);
+ if (len < s->len) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "String contains NUL");
}
+ else if (len > s->len) {
+ mrb_str_modify(mrb, s);
+ }
*ps = s->ptr;
i++;
}