* object.c (rb_str2cstr): warn if string contains \0 and length

value is ignored.

* class.c (rb_singleton_class_clone): should copy class constant
  table as well.

* class.c (rb_include_module): sometimes cache was mistakenly left
  uncleared - based on the patch by K.Kosako.

* ruby.h: all Check_SafeStr()'s are replaced by SafeStr() to
  ensure 'to_str' be always effective.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2001-03-28 08:43:25 +00:00
parent 6771ffa971
commit 62261ccb47
13 changed files with 114 additions and 78 deletions

52
file.c
View file

@ -84,12 +84,9 @@ apply2files(func, vargs, arg)
VALUE path;
struct RArray *args = RARRAY(vargs);
for (i=0; i<args->len; i++) {
Check_SafeStr(args->ptr[i]);
}
for (i=0; i<args->len; i++) {
path = args->ptr[i];
SafeStr(path);
if ((*func)(RSTRING(path)->ptr, arg) < 0)
rb_sys_fail(RSTRING(path)->ptr);
}
@ -309,7 +306,7 @@ rb_stat(file, st)
GetOpenFile(file, fptr);
return fstat(fileno(fptr->f), st);
}
Check_SafeStr(file);
SafeStr(file);
#if defined DJGPP
if (RSTRING(file)->len == 0) return -1;
#endif
@ -322,7 +319,7 @@ rb_file_s_stat(obj, fname)
{
struct stat st;
Check_SafeStr(fname);
SafeStr(fname);
if (stat(RSTRING(fname)->ptr, &st) == -1) {
rb_sys_fail(RSTRING(fname)->ptr);
}
@ -350,7 +347,7 @@ rb_file_s_lstat(obj, fname)
#ifdef HAVE_LSTAT
struct stat st;
Check_SafeStr(fname);
SafeStr(fname);
if (lstat(RSTRING(fname)->ptr, &st) == -1) {
rb_sys_fail(RSTRING(fname)->ptr);
}
@ -503,7 +500,7 @@ test_l(obj, fname)
#ifdef S_ISLNK
struct stat st;
Check_SafeStr(fname);
SafeStr(fname);
if (lstat(RSTRING(fname)->ptr, &st) < 0) return Qfalse;
if (S_ISLNK(st.st_mode)) return Qtrue;
#endif
@ -591,7 +588,7 @@ static VALUE
test_r(obj, fname)
VALUE obj, fname;
{
Check_SafeStr(fname);
SafeStr(fname);
if (eaccess(RSTRING(fname)->ptr, R_OK) < 0) return Qfalse;
return Qtrue;
}
@ -600,7 +597,7 @@ static VALUE
test_R(obj, fname)
VALUE obj, fname;
{
Check_SafeStr(fname);
SafeStr(fname);
if (access(RSTRING(fname)->ptr, R_OK) < 0) return Qfalse;
return Qtrue;
}
@ -609,7 +606,7 @@ static VALUE
test_w(obj, fname)
VALUE obj, fname;
{
Check_SafeStr(fname);
SafeStr(fname);
if (eaccess(RSTRING(fname)->ptr, W_OK) < 0) return Qfalse;
return Qtrue;
}
@ -618,7 +615,7 @@ static VALUE
test_W(obj, fname)
VALUE obj, fname;
{
Check_SafeStr(fname);
SafeStr(fname);
if (access(RSTRING(fname)->ptr, W_OK) < 0) return Qfalse;
return Qtrue;
}
@ -627,7 +624,7 @@ static VALUE
test_x(obj, fname)
VALUE obj, fname;
{
Check_SafeStr(fname);
SafeStr(fname);
if (eaccess(RSTRING(fname)->ptr, X_OK) < 0) return Qfalse;
return Qtrue;
}
@ -636,7 +633,7 @@ static VALUE
test_X(obj, fname)
VALUE obj, fname;
{
Check_SafeStr(fname);
SafeStr(fname);
if (access(RSTRING(fname)->ptr, X_OK) < 0) return Qfalse;
return Qtrue;
}
@ -732,7 +729,7 @@ test_suid(obj, fname)
VALUE obj, fname;
{
#ifdef S_ISUID
Check_SafeStr(fname);
SafeStr(fname);
return check3rdbyte(RSTRING(fname)->ptr, S_ISUID);
#else
return Qfalse;
@ -744,7 +741,7 @@ test_sgid(obj, fname)
VALUE obj, fname;
{
#ifdef S_ISGID
Check_SafeStr(fname);
SafeStr(fname);
return check3rdbyte(RSTRING(fname)->ptr, S_ISGID);
#else
return Qfalse;
@ -819,7 +816,7 @@ rb_file_s_ftype(obj, fname)
{
struct stat st;
Check_SafeStr(fname);
SafeStr(fname);
if (lstat(RSTRING(fname)->ptr, &st) == -1) {
rb_sys_fail(RSTRING(fname)->ptr);
}
@ -1182,8 +1179,8 @@ static VALUE
rb_file_s_link(obj, from, to)
VALUE obj, from, to;
{
Check_SafeStr(from);
Check_SafeStr(to);
SafeStr(from);
SafeStr(to);
if (link(RSTRING(from)->ptr, RSTRING(to)->ptr) < 0)
rb_sys_fail(RSTRING(from)->ptr);
@ -1195,8 +1192,8 @@ rb_file_s_symlink(obj, from, to)
VALUE obj, from, to;
{
#ifdef HAVE_SYMLINK
Check_SafeStr(from);
Check_SafeStr(to);
SafeStr(from);
SafeStr(to);
if (symlink(RSTRING(from)->ptr, RSTRING(to)->ptr) < 0)
rb_sys_fail(RSTRING(from)->ptr);
@ -1215,8 +1212,7 @@ rb_file_s_readlink(obj, path)
char buf[MAXPATHLEN];
int cc;
Check_SafeStr(path);
SafeStr(path);
if ((cc = readlink(RSTRING(path)->ptr, buf, MAXPATHLEN)) < 0)
rb_sys_fail(RSTRING(path)->ptr);
@ -1249,8 +1245,8 @@ static VALUE
rb_file_s_rename(obj, from, to)
VALUE obj, from, to;
{
Check_SafeStr(from);
Check_SafeStr(to);
SafeStr(from);
SafeStr(to);
if (rename(RSTRING(from)->ptr, RSTRING(to)->ptr) < 0) {
#if defined __CYGWIN__
@ -1514,7 +1510,7 @@ rb_file_s_truncate(obj, path, len)
VALUE obj, path, len;
{
rb_secure(2);
Check_SafeStr(path);
SafeStr(path);
#ifdef HAVE_TRUNCATE
if (truncate(RSTRING(path)->ptr, NUM2INT(len)) < 0)
@ -1659,7 +1655,7 @@ test_check(n, argc, argv)
for (i=1; i<n; i++) {
switch (TYPE(argv[i])) {
case T_STRING:
Check_SafeStr(argv[i]);
SafeStr(argv[i]);
break;
case T_FILE:
break;
@ -2224,7 +2220,7 @@ rb_find_file(file)
vpath = rb_ary_new();
for (i=0;i<RARRAY(rb_load_path)->len;i++) {
VALUE str = RARRAY(rb_load_path)->ptr[i];
Check_SafeStr(str);
SafeStr(str);
if (RSTRING(str)->len > 0) {
rb_ary_push(vpath, str);
}