suppress deprecate warning with Ruby 2.7

PR:		245339
Approved by:	maintainer timeout
This commit is contained in:
Hajimu UMEMOTO 2020-04-28 10:23:07 +00:00
parent 971ee48877
commit d1e7a0dbef
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=533243
8 changed files with 540 additions and 15 deletions

View File

@ -3,7 +3,7 @@
PORTNAME= bdb
PORTVERSION= 0.6.6
PORTREVISION= 7
PORTREVISION= 8
CATEGORIES= databases ruby
MASTER_SITES= ftp://ftp.idaemons.org/pub/distfiles/ruby/ \
http://idaemons.org/distfiles/ruby/ \

View File

@ -1,6 +1,88 @@
--- bdbxml1/bdbxml.cc.orig 2011-04-06 19:35:39 UTC
+++ bdbxml1/bdbxml.cc
@@ -2340,18 +2340,16 @@
@@ -1148,15 +1148,19 @@ xb_con_init(int argc, VALUE *argv, VALUE obj)
flags = NUM2INT(b);
}
}
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
if (flags & DB_TRUNCATE) {
rb_secure(2);
}
+#endif
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
if (flags & DB_CREATE) {
rb_secure(4);
}
if (rb_safe_level() >= 4) {
flags |= DB_RDONLY;
}
+#endif
if (!txn && con->env_val) {
bdb_ENV *envst = NULL;
GetEnvDBErr(con->env_val, envst, id_current_env, xb_eFatal);
@@ -1179,9 +1183,11 @@ xb_con_close(int argc, VALUE *argv, VALUE obj)
xcon *con;
int flags = 0;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4) {
rb_raise(rb_eSecurityError, "Insecure: can't close the container");
}
+#endif
Data_Get_Struct(obj, xcon, con);
if (!con->closed && con->con) {
if (rb_scan_args(argc, argv, "01", &a)) {
@@ -1516,7 +1522,9 @@ xb_int_update(int argc, VALUE *argv, VALUE obj, XmlUpd
DbTxn *txn;
VALUE a;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
GetConTxn(obj, con, txn);
if (rb_scan_args(argc, argv, "10", &a) != 1) {
rb_raise(rb_eArgError, "invalid number of arguments (%d for 1)", argc);
@@ -1545,7 +1553,9 @@ xb_int_push(int argc, VALUE *argv, VALUE obj, XmlUpdat
VALUE a, b;
int flags = 0;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
GetConTxn(obj, con, txn);
if (rb_scan_args(argc, argv, "11", &a, &b) == 2) {
flags = NUM2INT(b);
@@ -1775,7 +1785,9 @@ xb_int_delete(int argc, VALUE *argv, VALUE obj, XmlUpd
VALUE a, b;
int flags = 0;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
GetConTxn(obj, con, txn);
if (rb_scan_args(argc, argv, "11", &a, &b) == 2) {
flags = NUM2INT(b);
@@ -1824,7 +1836,9 @@ xb_con_remove(int argc, VALUE *argv, VALUE obj)
xcon *con;
DbTxn *txn = NULL;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
if (rb_scan_args(argc, argv, "11", &a, &b) == 2) {
flags = NUM2INT(b);
}
@@ -1844,7 +1858,9 @@ xb_con_rename(int argc, VALUE *argv, VALUE obj)
char *str;
DbTxn *txn = NULL;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
if (rb_scan_args(argc, argv, "21", &a, &b, &c) == 3) {
flags = NUM2INT(c);
}
@@ -2340,18 +2356,16 @@ extern "C" {
major = NUM2INT(rb_const_get(xb_mDb, rb_intern("VERSION_MAJOR")));
minor = NUM2INT(rb_const_get(xb_mDb, rb_intern("VERSION_MINOR")));
patch = NUM2INT(rb_const_get(xb_mDb, rb_intern("VERSION_PATCH")));

View File

@ -1,6 +1,170 @@
--- bdbxml2/bdbxml.cc.orig 2011-04-06 19:35:39 UTC
+++ bdbxml2/bdbxml.cc
@@ -5536,18 +5536,16 @@
@@ -392,9 +392,11 @@ xb_env_free(bdb_ENV *envst)
static VALUE
xb_env_close(VALUE obj)
{
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4) {
rb_raise(rb_eSecurityError, "Insecure: can't close the environnement");
}
+#endif
bdb_ENV *envst;
GetEnvDBErr(obj, envst, id_current_env, xb_eFatal);
xb_final(envst);
@@ -743,7 +745,9 @@ xb_man_type_set(VALUE obj, VALUE a)
static VALUE
xb_man_rename(VALUE obj, VALUE a, VALUE b)
{
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
XmlTransaction *xmltxn = get_txn(obj);
xman *man = get_man_txn(obj);
char *oldname = StringValuePtr(a);
@@ -760,7 +764,9 @@ xb_man_rename(VALUE obj, VALUE a, VALUE b)
static VALUE
xb_man_remove(VALUE obj, VALUE a)
{
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
XmlTransaction *xmltxn = get_txn(obj);
xman *man = get_man_txn(obj);
char *name = StringValuePtr(a);
@@ -843,7 +849,9 @@ xb_man_verify(int argc, VALUE *argv, VALUE obj)
VALUE a, b, c, d;
int flags = 0;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
switch (rb_scan_args(argc, argv, "12", &a, &b, &c, &d)) {
case 4:
flags = NUM2INT(d);
@@ -885,7 +893,9 @@ xb_man_load_con(int argc, VALUE *argv, VALUE obj)
unsigned long lineno = 0;
bool freeupd = true;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
xman *man = get_man(obj);
switch (rb_scan_args(argc, argv, "22", &a, &b, &c, &d)) {
case 4:
@@ -1028,7 +1038,9 @@ xb_man_reindex(int argc, VALUE *argv, VALUE obj)
bool freeupd = true;
int flags = 0;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
XmlTransaction *xmltxn = get_txn(obj);
xman *man = get_man_txn(obj);
switch (rb_scan_args(argc, argv, "12", &a, &b, &c)) {
@@ -1125,7 +1137,9 @@ xb_man_compact_con(int argc, VALUE *argv, VALUE obj)
bool freeupd = true;
int flags = 0;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
XmlTransaction *xmltxn = get_txn(obj);
xman *man = get_man_txn(obj);
switch (rb_scan_args(argc, argv, "11", &a, &b)) {
@@ -1168,7 +1182,9 @@ xb_man_truncate_con(int argc, VALUE *argv, VALUE obj)
bool freeupd = true;
int flags = 0;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
XmlTransaction *xmltxn = get_txn(obj);
xman *man = get_man_txn(obj);
switch (rb_scan_args(argc, argv, "11", &a, &b)) {
@@ -1274,9 +1290,11 @@ xb_int_open_con(int argc, VALUE *argv, VALUE obj, VALU
if (rb_scan_args(argc, argv, "11", &a, &b) == 2) {
flags = NUM2INT(b);
}
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
if (flags && DB_CREATE) {
rb_secure(4);
}
+#endif
char *name = StringValuePtr(a);
xman *man = get_man_txn(obj);
XmlTransaction *xmltxn = get_txn(obj);
@@ -1315,7 +1333,9 @@ xb_int_create_con(int argc, VALUE *argv, VALUE obj, VA
XmlContainer *xmlcon;
xcon *con;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
xman *man = get_man_txn(obj);
XmlTransaction *xmltxn = get_txn(obj);
if (argc == 1) {
@@ -1965,7 +1985,9 @@ xb_con_add(int argc, VALUE *argv, VALUE obj)
bool freeupd = true;
int flags = 0;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
xcon *con = get_con(obj);
XmlTransaction *xmltxn = get_con_txn(con);
rb_scan_args(argc, argv, "13", &a, &b, &c, &d);
@@ -2062,7 +2084,9 @@ xb_con_update(int argc, VALUE *argv, VALUE obj)
XmlUpdateContext *xmlupd = 0;
bool freeupd = true;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
xcon *con = get_con(obj);
XmlTransaction *xmltxn = get_con_txn(con);
if (rb_scan_args(argc, argv, "11", &a, &b) == 2) {
@@ -2098,7 +2122,9 @@ xb_con_delete(int argc, VALUE *argv, VALUE obj)
XmlUpdateContext *xmlupd = 0;
bool freeupd = true;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
xcon *con = get_con(obj);
XmlTransaction *xmltxn = get_con_txn(con);
if (rb_scan_args(argc, argv, "11", &a, &b) == 2) {
@@ -2554,7 +2580,9 @@ xb_con_index_set(int argc, VALUE *argv, VALUE obj)
bool freeupd = true;
VALUE a, b;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
xcon *con = get_con(obj);
XmlTransaction *xmltxn = get_con_txn(con);
if (rb_scan_args(argc, argv, "11", &a, &b) == 2) {
@@ -3176,7 +3204,9 @@ xb_man_create_look(int argc, VALUE *argv, VALUE obj)
XmlIndexLookup::Operation xmlop = XmlIndexLookup::EQ;
VALUE a, b, c, d, e, f, res;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
xman *man = get_man_txn(obj);
switch(rb_scan_args(argc, argv, "42", &a, &b, &c, &d, &e, &f)) {
case 6:
@@ -4392,7 +4422,9 @@ xb_mod_execute(int argc, VALUE *argv, VALUE obj)
bool freeupd = true, freecxt = true;
VALUE a, b, c;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
switch (rb_scan_args(argc, argv, "12", &a, &b, &c)) {
case 3:
{
@@ -5536,18 +5568,16 @@ extern "C" {
major = NUM2INT(rb_const_get(xb_mDb, rb_intern("VERSION_MAJOR")));
minor = NUM2INT(rb_const_get(xb_mDb, rb_intern("VERSION_MINOR")));
patch = NUM2INT(rb_const_get(xb_mDb, rb_intern("VERSION_PATCH")));

View File

@ -1,6 +1,18 @@
--- src/common.c.orig 2011-04-06 19:35:39 UTC
+++ src/common.c
@@ -1229,7 +1229,7 @@ bdb_s_new(int argc, VALUE *argv, VALUE o
@@ -1080,9 +1080,11 @@ bdb_close(int argc, VALUE *argv, VALUE obj)
bdb_DB *dbst;
int flags = 0;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4) {
rb_raise(rb_eSecurityError, "Insecure: can't close the database");
}
+#endif
Data_Get_Struct(obj, bdb_DB, dbst);
if (dbst->dbp != NULL) {
if (rb_scan_args(argc, argv, "01", &opt)) {
@@ -1229,7 +1231,7 @@ bdb_s_new(int argc, VALUE *argv, VALUE obj)
if (argc && TYPE(argv[argc - 1]) == T_HASH) {
VALUE v, f = argv[argc - 1];
@ -9,7 +21,7 @@
if (!rb_obj_is_kind_of(v, bdb_cTxn)) {
rb_raise(bdb_eFatal, "argument of txn must be a transaction");
}
@@ -1241,7 +1241,7 @@ bdb_s_new(int argc, VALUE *argv, VALUE o
@@ -1241,7 +1243,7 @@ bdb_s_new(int argc, VALUE *argv, VALUE obj)
dbst->options |= envst->options & BDB_NO_THREAD;
dbst->marshal = txnst->marshal;
}
@ -18,7 +30,7 @@
if (!rb_obj_is_kind_of(v, bdb_cEnv)) {
rb_raise(bdb_eFatal, "argument of env must be an environnement");
}
@@ -1254,11 +1254,11 @@ bdb_s_new(int argc, VALUE *argv, VALUE o
@@ -1254,11 +1256,11 @@ bdb_s_new(int argc, VALUE *argv, VALUE obj)
#if HAVE_CONST_DB_ENCRYPT
if (envst && (envst->options & BDB_ENV_ENCRYPT)) {
VALUE tmp = rb_str_new2("set_flags");
@ -32,7 +44,27 @@
rb_hash_aset(f, tmp, INT2NUM(NUM2INT(v) | DB_ENCRYPT));
}
else {
@@ -1570,10 +1570,10 @@ bdb_init(int argc, VALUE *argv, VALUE ob
@@ -1431,15 +1433,19 @@ bdb_init(int argc, VALUE *argv, VALUE obj)
dbst->options |= BDB_FEEDBACK;
}
#endif
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
if (flags & DB_TRUNCATE) {
rb_secure(2);
}
+#endif
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
if (flags & DB_CREATE) {
rb_secure(4);
}
if (rb_safe_level() >= 4) {
flags |= DB_RDONLY;
}
+#endif
#if HAVE_CONST_DB_DUPSORT
if (dbst->options & BDB_DUP_COMPARE) {
#if HAVE_TYPE_DB_INFO
@@ -1570,10 +1576,10 @@ bdb_init(int argc, VALUE *argv, VALUE obj)
#endif
switch(dbst->type) {
case DB_BTREE:
@ -45,7 +77,7 @@
break;
case DB_RECNO:
{
@@ -1581,17 +1581,17 @@ bdb_init(int argc, VALUE *argv, VALUE ob
@@ -1581,17 +1587,17 @@ bdb_init(int argc, VALUE *argv, VALUE obj)
rb_warning("It's hard to distinguish Recnum with Recno for all versions of Berkeley DB");
if ((count = bdb_is_recnum(dbst->dbp)) != -1) {
@ -66,7 +98,7 @@
break;
#endif
default:
@@ -1635,29 +1635,29 @@ bdb_s_alloc(obj)
@@ -1635,29 +1641,29 @@ bdb_s_alloc(obj)
dbst->options = BDB_NOT_OPEN;
cl = obj;
while (cl) {
@ -102,7 +134,47 @@
dbst->type = DB_UNKNOWN;
break;
}
@@ -3004,8 +3004,8 @@ bdb_each_kvc(argc, argv, obj, sens, repl
@@ -1802,7 +1808,9 @@ bdb_append_internal(argc, argv, obj, flag, retval)
VALUE *a, ary = Qnil;
volatile VALUE res = Qnil;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
if (argc < 1)
return obj;
INIT_TXN(txnid, obj, dbst);
@@ -1885,7 +1893,9 @@ bdb_put(int argc, VALUE *argv, VALUE obj)
int ret, flags;
db_recno_t recno;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
INIT_TXN(txnid, obj, dbst);
flags = 0;
a = b = c = Qnil;
@@ -2374,7 +2384,9 @@ bdb_consume(obj)
int ret;
db_recno_t recno;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
INIT_TXN(txnid, obj, dbst);
MEMZERO(&key, DBT, 1);
MEMZERO(&data, DBT, 1);
@@ -2551,7 +2563,9 @@ bdb_del(obj, a)
db_recno_t recno;
volatile VALUE b = Qnil;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
INIT_TXN(txnid, obj, dbst);
#if HAVE_CONST_DB_AUTO_COMMIT
if (txnid == NULL && (dbst->options & BDB_AUTO_COMMIT)) {
@@ -3004,8 +3018,8 @@ bdb_each_kvc(argc, argv, obj, sens, replace, type)
if (argc && TYPE(argv[argc - 1]) == T_HASH) {
VALUE g, f = argv[argc - 1];
@ -113,7 +185,29 @@
flags = NUM2INT(g);
}
argc--;
@@ -3323,8 +3323,8 @@ bdb_clear(int argc, VALUE *argv, VALUE o
@@ -3053,9 +3067,11 @@ bdb_each_kvc(argc, argv, obj, sens, replace, type)
}
#endif
type &= ~BDB_ST_ONE;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
if ((type & ~BDB_ST_PREFIX) == BDB_ST_DELETE) {
rb_secure(4);
}
+#endif
INIT_TXN(txnid, obj, dbst);
#if HAVE_DB_CURSOR_4
bdb_test_error(dbst->dbp->cursor(dbst->dbp, txnid, &dbcp, flags));
@@ -3309,7 +3325,9 @@ bdb_clear(int argc, VALUE *argv, VALUE obj)
#endif
int flags = 0;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
#if HAVE_ST_DB_TRUNCATE
INIT_TXN(txnid, obj, dbst);
#if HAVE_CONST_DB_AUTO_COMMIT
@@ -3323,8 +3341,8 @@ bdb_clear(int argc, VALUE *argv, VALUE obj)
flags = 0;
if (argc && TYPE(argv[argc - 1]) == T_HASH) {
VALUE g, f = argv[argc - 1];
@ -124,7 +218,7 @@
flags = NUM2INT(g);
}
argc--;
@@ -3348,8 +3348,8 @@ bdb_replace(int argc, VALUE *argv, VALUE
@@ -3348,8 +3366,8 @@ bdb_replace(int argc, VALUE *argv, VALUE obj)
flags = 0;
if (TYPE(argv[argc - 1]) == T_HASH) {
VALUE f = argv[argc - 1];
@ -135,3 +229,54 @@
flags = NUM2INT(g);
}
argc--;
@@ -3557,8 +3575,10 @@ bdb_sync(obj)
{
bdb_DB *dbst;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4)
rb_raise(rb_eSecurityError, "Insecure: can't sync the database");
+#endif
GetDB(obj, dbst);
bdb_test_error(dbst->dbp->sync(dbst->dbp, 0));
return Qtrue;
@@ -3884,7 +3904,9 @@ bdb_s_upgrade(int argc, VALUE *argv, VALUE obj)
int flags;
VALUE val;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
flags = 0;
if (rb_scan_args(argc, argv, "11", &a, &b) == 2) {
flags = NUM2INT(b);
@@ -3908,7 +3930,9 @@ bdb_s_remove(int argc, VALUE *argv, VALUE obj)
VALUE a, b, c;
char *name, *subname;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
c = bdb_i_create(obj);
GetDB(c, dbst);
name = subname = NULL;
@@ -3936,7 +3960,9 @@ bdb_s_rename(int argc, VALUE *argv, VALUE obj)
VALUE a, b, c;
char *name, *subname, *newname;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
c = bdb_i_create(obj);
GetDB(c, dbst);
name = subname = NULL;
@@ -4222,7 +4248,9 @@ bdb_verify(int argc, VALUE *argv, VALUE obj)
#endif
FILE *io = NULL;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
file = database = NULL;
switch(rb_scan_args(argc, argv, "02", &iov, &flagv)) {
case 2:

View File

@ -1,6 +1,6 @@
--- src/cursor.c.orig 2011-04-06 19:35:39 UTC
+++ src/cursor.c
@@ -29,8 +29,8 @@ bdb_cursor(int argc, VALUE *argv, VALUE
@@ -29,8 +29,8 @@ bdb_cursor(int argc, VALUE *argv, VALUE obj)
flags = 0;
if (argc && TYPE(argv[argc - 1]) == T_HASH) {
VALUE g, f = argv[argc - 1];
@ -11,3 +11,34 @@
flags = NUM2INT(g);
}
argc--;
@@ -67,8 +67,10 @@ bdb_cursor_close(VALUE obj)
bdb_DBC *dbcst;
bdb_DB *dbst;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4)
rb_raise(rb_eSecurityError, "Insecure: can't close the cursor");
+#endif
GetCursorDB(obj, dbcst, dbst);
bdb_test_error(dbcst->dbc->c_close(dbcst->dbc));
dbcst->dbc = NULL;
@@ -82,7 +84,9 @@ bdb_cursor_del(VALUE obj)
bdb_DBC *dbcst;
bdb_DB *dbst;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
GetCursorDB(obj, dbcst, dbst);
bdb_test_error(dbcst->dbc->c_del(dbcst->dbc, flags));
return Qtrue;
@@ -353,7 +357,9 @@ bdb_cursor_put(int argc, VALUE *argv, VALUE obj)
db_recno_t recno;
int ret;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
MEMZERO(&key, DBT, 1);
MEMZERO(&data, DBT, 1);
cnt = rb_scan_args(argc, argv, "21", &a, &b, &c);

View File

@ -1,6 +1,6 @@
--- src/recnum.c.orig 2011-04-06 19:35:39 UTC
+++ src/recnum.c
@@ -17,7 +17,7 @@ bdb_recnum_init(int argc, VALUE *argv, V
@@ -17,7 +17,7 @@ bdb_recnum_init(int argc, VALUE *argv, VALUE obj)
argc++;
}
rb_hash_aset(argv[argc - 1], array, INT2FIX(0));
@ -9,7 +9,17 @@
rb_hash_aset(argv[argc - 1], sarray, INT2FIX(0));
}
rb_hash_aset(argv[argc - 1], rb_str_new2("set_flags"), INT2FIX(DB_RENUMBER));
@@ -697,8 +697,8 @@ bdb_sary_clear(int argc, VALUE *argv, VA
@@ -112,7 +112,9 @@ bdb_intern_shift_pop(VALUE obj, int depart, int len)
db_recno_t recno;
VALUE res;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
INIT_TXN(txnid, obj, dbst);
#if HAVE_DB_CURSOR_4
bdb_test_error(dbst->dbp->cursor(dbst->dbp, txnid, &dbcp, 0));
@@ -697,8 +699,8 @@ bdb_sary_clear(int argc, VALUE *argv, VALUE obj)
if (argc && TYPE(argv[argc - 1]) == T_HASH) {
VALUE f = argv[argc - 1];

View File

@ -0,0 +1,41 @@
--- src/env.c.orig 2011-04-06 19:35:39 UTC
+++ src/env.c
@@ -1121,9 +1121,11 @@ bdb_env_close(VALUE obj)
{
bdb_ENV *envst;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4) {
rb_raise(rb_eSecurityError, "Insecure: can't close the environnement");
}
+#endif
GetEnvDB(obj, envst);
bdb_final(envst);
RDATA(obj)->dfree = free;
@@ -1517,12 +1519,16 @@ bdb_env_init(int argc, VALUE *argv, VALUE obj)
flags = NUM2INT(c);
break;
}
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
if (flags & DB_CREATE) {
rb_secure(4);
}
+#endif
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 1
if (flags & DB_USE_ENVIRON) {
rb_secure(1);
}
+#endif
#ifndef BDB_NO_THREAD_COMPILE
if (!(envst->options & BDB_NO_THREAD)) {
bdb_set_func(envst);
@@ -1658,7 +1664,9 @@ bdb_env_s_remove(int argc, VALUE *argv, VALUE obj)
char *db_home;
int flag = 0;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
if (rb_scan_args(argc, argv, "11", &a, &b) == 2) {
flag = NUM2INT(b);
}

View File

@ -0,0 +1,52 @@
--- src/transaction.c.orig 2011-04-06 19:35:39 UTC
+++ src/transaction.c
@@ -139,7 +139,9 @@ bdb_txn_commit(int argc, VALUE *argv, VALUE obj)
VALUE a;
int flags;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
flags = 0;
if (rb_scan_args(argc, argv, "01", &a) == 1) {
flags = NUM2INT(a);
@@ -552,7 +554,9 @@ bdb_env_recover(VALUE obj)
if (!rb_block_given_p()) {
rb_raise(bdb_eFatal, "call out of an iterator");
}
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
GetEnvDB(obj, envst);
txnv = Data_Make_Struct(bdb_cTxn, bdb_TXN, bdb_txn_mark, bdb_txn_free, txnst);
txnst->env = obj;
@@ -584,7 +588,9 @@ bdb_txn_discard(VALUE obj)
bdb_TXN *txnst;
int flags;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4
rb_secure(4);
+#endif
flags = 0;
GetTxnDB(obj, txnst);
#if HAVE_ST_DB_TXN_DISCARD
@@ -761,7 +767,9 @@ bdb_env_dbremove(int argc, VALUE *argv, VALUE obj)
bdb_TXN *txnst;
DB_TXN *txnid;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
a = b = c = Qnil;
file = database = NULL;
flags = 0;
@@ -810,7 +818,9 @@ bdb_env_dbrename(int argc, VALUE *argv, VALUE obj)
bdb_TXN *txnst;
DB_TXN *txnid;
+#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2
rb_secure(2);
+#endif
a = b = c = Qnil;
file = database = newname = NULL;
flags = 0;