diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-08-26 00:41:14 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-08-26 00:41:14 -0700 |
| commit | 26839b9c248ce7cceae6281f235e3a6e505b82f7 (patch) | |
| tree | 360f598c31cbd195d745862005b27797fdb7c09d /src/class.c | |
| parent | f3c8cf673556ad6420dbe4e21ee532b1a68b3301 (diff) | |
| parent | 23df879a81161a0b87721f422ca7e68f63f6746e (diff) | |
| download | mruby-26839b9c248ce7cceae6281f235e3a6e505b82f7.tar.gz mruby-26839b9c248ce7cceae6281f235e3a6e505b82f7.zip | |
Merge pull request #1487 from h2so5/z-option-with-shared-string
Fix a problem of 'z' option and shared string
Diffstat (limited to 'src/class.c')
| -rw-r--r-- | src/class.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/class.c b/src/class.c index 5b6ae6a12..1870b94ba 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++; } |
