From dbaefe66fe24bd09d20b5aa7dd96eb1a30a2d8c3 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 14 Dec 1999 06:50:43 +0000 Subject: 19991214 git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@587 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/dbm/dbm.c | 7 ------- ext/gdbm/gdbm.c | 15 ++++----------- ext/socket/socket.c | 17 ++++++++++++----- ext/tk/lib/tk.rb | 6 +++--- 4 files changed, 19 insertions(+), 26 deletions(-) (limited to 'ext') diff --git a/ext/dbm/dbm.c b/ext/dbm/dbm.c index 1240f4b9a..2aeede267 100644 --- a/ext/dbm/dbm.c +++ b/ext/dbm/dbm.c @@ -315,19 +315,12 @@ fdbm_store(obj, keystr, valstr) struct dbmdata *dbmp; DBM *dbm; - if (valstr == Qnil) { - fdbm_delete(obj, keystr); - return Qnil; - } - rb_secure(4); keystr = rb_obj_as_string(keystr); key.dptr = RSTRING(keystr)->ptr; key.dsize = RSTRING(keystr)->len; - if (NIL_P(valstr)) return fdbm_delete(obj, keystr); - valstr = rb_obj_as_string(valstr); val.dptr = RSTRING(valstr)->ptr; val.dsize = RSTRING(valstr)->len; diff --git a/ext/gdbm/gdbm.c b/ext/gdbm/gdbm.c index b38bb8ef4..116b19d18 100644 --- a/ext/gdbm/gdbm.c +++ b/ext/gdbm/gdbm.c @@ -169,7 +169,7 @@ fgdbm_delete(obj, keystr) if (gdbm_delete(dbm, key)) { dbmp->di_size = -1; - rb_raise(rb_eRuntimeError, "dbm_delete failed"); + rb_raise(rb_eRuntimeError, "gdbm_delete failed"); } else if (dbmp->di_size >= 0) { dbmp->di_size--; @@ -218,7 +218,7 @@ fgdbm_delete_if(obj) valstr = rb_tainted_str_new(val.dptr, val.dsize); if (RTEST(rb_yield(rb_assoc_new(keystr, valstr)))) { if (gdbm_delete(dbm, key)) { - rb_raise(rb_eRuntimeError, "dbm_delete failed"); + rb_raise(rb_eRuntimeError, "gdbm_delete failed"); } } } @@ -240,7 +240,7 @@ fgdbm_clear(obj) for (key = gdbm_firstkey(dbm); key.dptr; key = nextkey) { nextkey = gdbm_nextkey(dbm, key); if (gdbm_delete(dbm, key)) { - rb_raise(rb_eRuntimeError, "dbm_delete failed"); + rb_raise(rb_eRuntimeError, "gdbm_delete failed"); } } return obj; @@ -313,19 +313,12 @@ fgdbm_store(obj, keystr, valstr) struct dbmdata *dbmp; GDBM_FILE dbm; - if (valstr == Qnil) { - fgdbm_delete(obj, keystr); - return Qnil; - } - rb_secure(4); keystr = rb_obj_as_string(keystr); key.dptr = RSTRING(keystr)->ptr; key.dsize = RSTRING(keystr)->len; - if (NIL_P(valstr)) return fgdbm_delete(obj, keystr); - valstr = rb_obj_as_string(valstr); val.dptr = RSTRING(valstr)->ptr; val.dsize = RSTRING(valstr)->len; @@ -335,7 +328,7 @@ fgdbm_store(obj, keystr, valstr) dbm = dbmp->di_dbm; if (gdbm_store(dbm, key, val, GDBM_REPLACE)) { if (errno == EPERM) rb_sys_fail(0); - rb_raise(rb_eRuntimeError, "dbm_store failed"); + rb_raise(rb_eRuntimeError, "gdbm_store failed"); } return valstr; diff --git a/ext/socket/socket.c b/ext/socket/socket.c index b38cc48c9..94597055a 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -115,7 +115,6 @@ sock_new(class, fd) NEWOBJ(sock, struct RFile); OBJSETUP(sock, class, T_FILE); - rb_secure(4); MakeOpenFile(sock, fp); fp->f = rb_fdopen(fd, "r"); #ifdef NT @@ -140,7 +139,9 @@ bsock_shutdown(argc, argv, sock) int how; OpenFile *fptr; - rb_secure(4); + if (rb_safe_level() >= 4 && !OBJ_TAINTED(sock)) { + rb_raise(rb_eSecurityError, "Insecure: can't shutdown socket"); + } rb_scan_args(argc, argv, "01", &howto); if (howto == Qnil) how = 2; @@ -163,7 +164,9 @@ bsock_close_read(sock) { OpenFile *fptr; - rb_secure(4); + if (rb_safe_level() >= 4 && !OBJ_TAINTED(sock)) { + rb_raise(rb_eSecurityError, "Insecure: can't close socket"); + } GetOpenFile(sock, fptr); shutdown(fileno(fptr->f), 0); if (fptr->f2 == 0) { @@ -188,7 +191,9 @@ bsock_close_write(sock) { OpenFile *fptr; - rb_secure(4); + if (rb_safe_level() >= 4 && !OBJ_TAINTED(sock)) { + rb_raise(rb_eSecurityError, "Insecure: can't close socket"); + } GetOpenFile(sock, fptr); if (fptr->f2 == 0) { return rb_io_close(sock); @@ -215,7 +220,6 @@ bsock_setsockopt(sock, lev, optname, val) char *v; int vlen; - rb_secure(2); level = NUM2INT(lev); option = NUM2INT(optname); switch (TYPE(val)) { @@ -794,6 +798,9 @@ socks_s_close(sock) { OpenFile *fptr; + if (rb_safe_level() >= 4 && !OBJ_TAINTED(sock)) { + rb_raise(rb_eSecurityError, "Insecure: can't close socket"); + } GetOpenFile(sock, fptr); shutdown(fileno(fptr->f), 2); shutdown(fileno(fptr->f2), 2); diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb index c933f9db8..9f1bae1d4 100644 --- a/ext/tk/lib/tk.rb +++ b/ext/tk/lib/tk.rb @@ -2150,7 +2150,7 @@ class TkListbox