summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2025-10-08 18:19:47 +0900
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2026-01-22 18:02:29 +0900
commit357d601e8b44b2d2b99ffaf05f6912c4c705c4e6 (patch)
treec0e624ca4c5abbcac295bb6f50a0fafcfa212adb
parent2051ac34b72e95de6049eb2d226e5a55024c83c7 (diff)
[Bug #21629] Initialize `struct RString`
-rw-r--r--error.c2
-rw-r--r--include/ruby/internal/core/rbasic.h3
-rw-r--r--include/ruby/internal/core/rstring.h2
-rw-r--r--load.c4
-rw-r--r--marshal.c2
-rw-r--r--string.c8
-rw-r--r--symbol.c8
7 files changed, 16 insertions, 13 deletions
diff --git a/error.c b/error.c
index 726f57a4c0..5900048f9b 100644
--- a/error.c
+++ b/error.c
@@ -2067,7 +2067,7 @@ name_err_mesg_to_str(VALUE obj)
mesg = ptr[NAME_ERR_MESG__MESG];
if (NIL_P(mesg)) return Qnil;
else {
- struct RString s_str, d_str;
+ struct RString s_str = {RBASIC_INIT}, d_str = {RBASIC_INIT};
VALUE c, s, d = 0, args[4];
int state = 0, singleton = 0;
rb_encoding *usascii = rb_usascii_encoding();
diff --git a/include/ruby/internal/core/rbasic.h b/include/ruby/internal/core/rbasic.h
index 4617f743a7..c63968ce13 100644
--- a/include/ruby/internal/core/rbasic.h
+++ b/include/ruby/internal/core/rbasic.h
@@ -104,6 +104,9 @@ RBasic {
klass(RBIMPL_VALUE_NULL)
{
}
+# define RBASIC_INIT RBasic()
+#else
+# define RBASIC_INIT {RBIMPL_VALUE_NULL}
#endif
};
diff --git a/include/ruby/internal/core/rstring.h b/include/ruby/internal/core/rstring.h
index e394ab7dca..7240c60380 100644
--- a/include/ruby/internal/core/rstring.h
+++ b/include/ruby/internal/core/rstring.h
@@ -462,7 +462,7 @@ rbimpl_rstring_getmem(VALUE str)
}
else {
/* Expecting compilers to optimize this on-stack struct away. */
- struct RString retval;
+ struct RString retval = {RBASIC_INIT};
retval.as.heap.len = RSTRING_EMBED_LEN(str);
retval.as.heap.ptr = RSTRING(str)->as.embed.ary;
return retval;
diff --git a/load.c b/load.c
index ecb21faa72..c59cf73ce0 100644
--- a/load.c
+++ b/load.c
@@ -1295,7 +1295,7 @@ rb_require_internal(VALUE fname)
int
ruby_require_internal(const char *fname, unsigned int len)
{
- struct RString fake;
+ struct RString fake = {RBASIC_INIT};
VALUE str = rb_setup_fake_str(&fake, fname, len, 0);
rb_execution_context_t *ec = GET_EC();
int result = require_internal(ec, str, 0, RTEST(ruby_verbose));
@@ -1328,7 +1328,7 @@ rb_require_string_internal(VALUE fname)
VALUE
rb_require(const char *fname)
{
- struct RString fake;
+ struct RString fake = {RBASIC_INIT};
VALUE str = rb_setup_fake_str(&fake, fname, strlen(fname), 0);
return rb_require_string_internal(str);
}
diff --git a/marshal.c b/marshal.c
index 4ea4255971..c0d5cca4a5 100644
--- a/marshal.c
+++ b/marshal.c
@@ -1398,7 +1398,7 @@ long
ruby_marshal_read_long(const char **buf, long len)
{
long x;
- struct RString src;
+ struct RString src = {RBASIC_INIT};
struct load_arg arg;
memset(&arg, 0, sizeof(arg));
arg.src = rb_setup_fake_str(&src, *buf, len, 0);
diff --git a/string.c b/string.c
index a3aa91bc9e..b9ffd19b8d 100644
--- a/string.c
+++ b/string.c
@@ -548,14 +548,14 @@ rb_setup_fake_str(struct RString *fake_str, const char *name, long len, rb_encod
MJIT_FUNC_EXPORTED VALUE
rb_fstring_new(const char *ptr, long len)
{
- struct RString fake_str;
+ struct RString fake_str = {RBASIC_INIT};
return register_fstring(setup_fake_str(&fake_str, ptr, len, ENCINDEX_US_ASCII), FALSE);
}
VALUE
rb_fstring_enc_new(const char *ptr, long len, rb_encoding *enc)
{
- struct RString fake_str;
+ struct RString fake_str = {RBASIC_INIT};
return register_fstring(rb_setup_fake_str(&fake_str, ptr, len, enc), FALSE);
}
@@ -11961,7 +11961,7 @@ rb_str_to_interned_str(VALUE str)
VALUE
rb_interned_str(const char *ptr, long len)
{
- struct RString fake_str;
+ struct RString fake_str = {RBASIC_INIT};
return register_fstring(setup_fake_str(&fake_str, ptr, len, ENCINDEX_US_ASCII), TRUE);
}
@@ -11978,7 +11978,7 @@ rb_enc_interned_str(const char *ptr, long len, rb_encoding *enc)
rb_enc_autoload(enc);
}
- struct RString fake_str;
+ struct RString fake_str = {RBASIC_INIT};
return register_fstring(rb_setup_fake_str(&fake_str, ptr, len, enc), TRUE);
}
diff --git a/symbol.c b/symbol.c
index 429064e43d..3d120fe5bc 100644
--- a/symbol.c
+++ b/symbol.c
@@ -726,7 +726,7 @@ ID
rb_intern3(const char *name, long len, rb_encoding *enc)
{
VALUE sym;
- struct RString fake_str;
+ struct RString fake_str = {RBASIC_INIT};
VALUE str = rb_setup_fake_str(&fake_str, name, len, enc);
OBJ_FREEZE(str);
sym = lookup_str_sym(str);
@@ -1181,7 +1181,7 @@ rb_check_symbol(volatile VALUE *namep)
ID
rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc)
{
- struct RString fake_str;
+ struct RString fake_str = {RBASIC_INIT};
const VALUE name = rb_setup_fake_str(&fake_str, ptr, len, enc);
sym_check_asciionly(name, true);
@@ -1193,7 +1193,7 @@ VALUE
rb_check_symbol_cstr(const char *ptr, long len, rb_encoding *enc)
{
VALUE sym;
- struct RString fake_str;
+ struct RString fake_str = {RBASIC_INIT};
const VALUE name = rb_setup_fake_str(&fake_str, ptr, len, enc);
sym_check_asciionly(name, true);
@@ -1217,7 +1217,7 @@ FUNC_MINIMIZED(VALUE rb_sym_intern_ascii_cstr(const char *ptr));
VALUE
rb_sym_intern(const char *ptr, long len, rb_encoding *enc)
{
- struct RString fake_str;
+ struct RString fake_str = {RBASIC_INIT};
const VALUE name = rb_setup_fake_str(&fake_str, ptr, len, enc);
return rb_str_intern(name);
}