From 23c74845eda6cab10ac3b5e1b98e75fc73bfde75 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Thu, 10 May 2018 02:54:04 +0000 Subject: RSTRING_PTR is not guaranteed to be char*-aligned We need to ensure aligned memory access by allocating another memory region. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63388 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'ruby.c') diff --git a/ruby.c b/ruby.c index 897728ce48..27f15d502d 100644 --- a/ruby.c +++ b/ruby.c @@ -759,6 +759,7 @@ moreswitches(const char *s, ruby_cmdline_options_t *opt, int envopt) char **argv, *p; const char *ap = 0; VALUE argstr, argary; + void *ptr; while (ISSPACE(*s)) s++; if (!*s) return; @@ -781,7 +782,8 @@ moreswitches(const char *s, ruby_cmdline_options_t *opt, int envopt) argc = RSTRING_LEN(argary) / sizeof(ap); ap = 0; rb_str_cat(argary, (char *)&ap, sizeof(ap)); - argv = (char **)RSTRING_PTR(argary); + argv = ptr = ALLOC_N(char *, argc); + MEMMOVE(argv, RSTRING_PTR(argary), char *, argc); while ((i = proc_options(argc, argv, opt, envopt)) > 1 && envopt && (argc -= i) > 0) { argv += i; @@ -794,6 +796,7 @@ moreswitches(const char *s, ruby_cmdline_options_t *opt, int envopt) } } + ruby_xfree(ptr); /* get rid of GC */ rb_str_resize(argary, 0); rb_str_resize(argstr, 0); -- cgit v1.2.3