From 65e802f769eb324da62541b299e93e87a3b4dbce Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 15 Aug 2013 01:49:37 +0900 Subject: remove Class#alloc method --- src/class.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src/class.c') diff --git a/src/class.c b/src/class.c index b5c561d06..5b6ae6a12 100644 --- a/src/class.c +++ b/src/class.c @@ -1886,7 +1886,6 @@ mrb_init_class(mrb_state *mrb) mrb_define_method(mrb, bob, "method_missing", mrb_bob_missing, MRB_ARGS_ANY()); /* 15.3.1.3.30 */ mrb_define_class_method(mrb, cls, "new", mrb_class_new_class, MRB_ARGS_ANY()); - mrb_define_method(mrb, cls, "alloc", mrb_instance_alloc, MRB_ARGS_NONE()); mrb_define_method(mrb, cls, "superclass", mrb_class_superclass, MRB_ARGS_NONE()); /* 15.2.3.3.4 */ mrb_define_method(mrb, cls, "new", mrb_instance_new, MRB_ARGS_ANY()); /* 15.2.3.3.3 */ mrb_define_method(mrb, cls, "inherited", mrb_bob_init, MRB_ARGS_REQ(1)); -- cgit v1.2.3 From 23df879a81161a0b87721f422ca7e68f63f6746e Mon Sep 17 00:00:00 2001 From: h2so5 Date: Sat, 24 Aug 2013 06:49:58 +0900 Subject: Fix a problem of 'z' option and shared string --- src/class.c | 7 ++++++- src/string.c | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src/class.c') 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++; } diff --git a/src/string.c b/src/string.c index 2004c9fe8..88dcfc63e 100644 --- a/src/string.c +++ b/src/string.c @@ -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 { -- cgit v1.2.3