Merge pull request #1487 from h2so5/z-option-with-shared-string

Fix a problem of 'z' option and shared string
This commit is contained in:
Yukihiro "Matz" Matsumoto
2013-08-26 00:41:14 -07:00
2 changed files with 7 additions and 1 deletions
+6 -1
View File
@@ -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++;
}
+1
View File
@@ -62,6 +62,7 @@ mrb_str_modify(mrb_state *mrb, struct RString *s)
if (shared->refcnt == 1 && s->ptr == shared->ptr) {
s->ptr = shared->ptr;
s->aux.capa = shared->len;
s->ptr[s->len] = '\0';
mrb_free(mrb, shared);
}
else {