mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
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:
+6
-1
@@ -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++;
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user