mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #4328 from shuujii/fix-constant-name-validation
Fix constant name validation
This commit is contained in:
+1
-1
@@ -1898,7 +1898,7 @@ mrb_mod_undef(mrb_state *mrb, mrb_value mod)
|
||||
static mrb_bool
|
||||
const_name_p(mrb_state *mrb, const char *name, mrb_int len)
|
||||
{
|
||||
return len > 0 && ISUPPER(name[0]);
|
||||
return len > 0 && ISUPPER(name[0]) && mrb_ident_p(name+1, len-1);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
+13
-7
@@ -428,22 +428,17 @@ mrb_iv_defined(mrb_state *mrb, mrb_value obj, mrb_sym sym)
|
||||
return mrb_obj_iv_defined(mrb, mrb_obj_ptr(obj), sym);
|
||||
}
|
||||
|
||||
#define identchar(c) (ISALNUM(c) || (c) == '_' || !ISASCII(c))
|
||||
|
||||
MRB_API mrb_bool
|
||||
mrb_iv_name_sym_p(mrb_state *mrb, mrb_sym iv_name)
|
||||
{
|
||||
const char *s;
|
||||
mrb_int i, len;
|
||||
mrb_int len;
|
||||
|
||||
s = mrb_sym2name_len(mrb, iv_name, &len);
|
||||
if (len < 2) return FALSE;
|
||||
if (s[0] != '@') return FALSE;
|
||||
if (s[1] == '@') return FALSE;
|
||||
for (i=1; i<len; i++) {
|
||||
if (!identchar(s[i])) return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
return mrb_ident_p(s+1, len-1);
|
||||
}
|
||||
|
||||
MRB_API void
|
||||
@@ -1114,3 +1109,14 @@ mrb_class_find_path(mrb_state *mrb, struct RClass *c)
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
#define identchar(c) (ISALNUM(c) || (c) == '_' || !ISASCII(c))
|
||||
|
||||
mrb_bool
|
||||
mrb_ident_p(const char *s, mrb_int len)
|
||||
{
|
||||
for (mrb_int i = 0; i < len; i++) {
|
||||
if (!identchar(s[i])) return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user