1 --- bdbxml1/bdbxml.cc.orig 2011-04-06 19:35:39 UTC 2 +++ bdbxml1/bdbxml.cc 3 @@ -1148,15 +1148,19 @@ xb_con_init(int argc, VALUE *argv, VALUE obj) 4 flags = NUM2INT(b); 5 } 6 } 7 +#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2 8 if (flags & DB_TRUNCATE) { 9 rb_secure(2); 10 } 11 +#endif 12 +#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4 13 if (flags & DB_CREATE) { 14 rb_secure(4); 15 } 16 if (rb_safe_level() >= 4) { 17 flags |= DB_RDONLY; 18 } 19 +#endif 20 if (!txn && con->env_val) { 21 bdb_ENV *envst = NULL; 22 GetEnvDBErr(con->env_val, envst, id_current_env, xb_eFatal); 23 @@ -1179,9 +1183,11 @@ xb_con_close(int argc, VALUE *argv, VALUE obj) 24 xcon *con; 25 int flags = 0; 26 27 +#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4 28 if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4) { 29 rb_raise(rb_eSecurityError, "Insecure: can't close the container"); 30 } 31 +#endif 32 Data_Get_Struct(obj, xcon, con); 33 if (!con->closed && con->con) { 34 if (rb_scan_args(argc, argv, "01", &a)) { 35 @@ -1516,7 +1522,9 @@ xb_int_update(int argc, VALUE *argv, VALUE obj, XmlUpd 36 DbTxn *txn; 37 VALUE a; 38 39 +#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4 40 rb_secure(4); 41 +#endif 42 GetConTxn(obj, con, txn); 43 if (rb_scan_args(argc, argv, "10", &a) != 1) { 44 rb_raise(rb_eArgError, "invalid number of arguments (%d for 1)", argc); 45 @@ -1545,7 +1553,9 @@ xb_int_push(int argc, VALUE *argv, VALUE obj, XmlUpdat 46 VALUE a, b; 47 int flags = 0; 48 49 +#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4 50 rb_secure(4); 51 +#endif 52 GetConTxn(obj, con, txn); 53 if (rb_scan_args(argc, argv, "11", &a, &b) == 2) { 54 flags = NUM2INT(b); 55 @@ -1775,7 +1785,9 @@ xb_int_delete(int argc, VALUE *argv, VALUE obj, XmlUpd 56 VALUE a, b; 57 int flags = 0; 58 59 +#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 4 60 rb_secure(4); 61 +#endif 62 GetConTxn(obj, con, txn); 63 if (rb_scan_args(argc, argv, "11", &a, &b) == 2) { 64 flags = NUM2INT(b); 65 @@ -1824,7 +1836,9 @@ xb_con_remove(int argc, VALUE *argv, VALUE obj) 66 xcon *con; 67 DbTxn *txn = NULL; 68 69 +#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2 70 rb_secure(2); 71 +#endif 72 if (rb_scan_args(argc, argv, "11", &a, &b) == 2) { 73 flags = NUM2INT(b); 74 } 75 @@ -1844,7 +1858,9 @@ xb_con_rename(int argc, VALUE *argv, VALUE obj) 76 char *str; 77 DbTxn *txn = NULL; 78 79 +#if defined(RUBY_SAFE_LEVEL_MAX) && RUBY_SAFE_LEVEL_MAX >= 2 80 rb_secure(2); 81 +#endif 82 if (rb_scan_args(argc, argv, "21", &a, &b, &c) == 3) { 83 flags = NUM2INT(c); 84 } 85 @@ -2340,18 +2356,16 @@ extern "C" { 86 major = NUM2INT(rb_const_get(xb_mDb, rb_intern("VERSION_MAJOR"))); 87 minor = NUM2INT(rb_const_get(xb_mDb, rb_intern("VERSION_MINOR"))); 88 patch = NUM2INT(rb_const_get(xb_mDb, rb_intern("VERSION_PATCH"))); 89 - if (major != DB_VERSION_MAJOR || minor != DB_VERSION_MINOR 90 - || patch != DB_VERSION_PATCH) { 91 - rb_raise(rb_eNotImpError, "\nBDB::XML needs compatible versions of BDB\n\tyou have BDB::XML version %d.%d.%d and BDB version %d.%d.%d\n", 92 - DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, 93 - major, minor, patch); 94 + if (major != DB_VERSION_MAJOR || minor != DB_VERSION_MINOR) { 95 + rb_raise(rb_eNotImpError, "\nBDB::XML needs compatible versions of BDB\n\tyou have BDB::XML version %d.%d and BDB version %d.%d\n", 96 + DB_VERSION_MAJOR, DB_VERSION_MINOR, 97 + major, minor); 98 } 99 version = rb_tainted_str_new2(dbxml_version(&major, &minor, &patch)); 100 - if (major != DBXML_VERSION_MAJOR || minor != DBXML_VERSION_MINOR 101 - || patch != DBXML_VERSION_PATCH) { 102 - rb_raise(rb_eNotImpError, "\nBDB::XML needs compatible versions of DbXml\n\tyou have DbXml.hpp version %d.%d.%d and libdbxml version %d.%d.%d\n", 103 - DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, 104 - major, minor, patch); 105 + if (major != DBXML_VERSION_MAJOR || minor != DBXML_VERSION_MINOR) { 106 + rb_raise(rb_eNotImpError, "\nBDB::XML needs compatible versions of DbXml\n\tyou have DbXml.hpp version %d.%d and libdbxml version %d.%d\n", 107 + DB_VERSION_MAJOR, DB_VERSION_MINOR, 108 + major, minor); 109 } 110 111 xb_eFatal = rb_const_get(xb_mDb, rb_intern("Fatal")); 112 @@ -2477,7 +2491,7 @@ extern "C" { 113 rb_define_method(xb_cUpd, "<<", RMF(xb_upd_add), 1); 114 rb_define_method(xb_cUpd, "delete", RMF(xb_upd_delete), -1); 115 rb_define_method(xb_cUpd, "update", RMF(xb_upd_update), -1); 116 - xb_cTmp = rb_define_class_under(xb_mXML, "Tmp", rb_cData); 117 + xb_cTmp = rb_define_class_under(xb_mXML, "Tmp", rb_cObject); 118 rb_undef_method(CLASS_OF(xb_cTmp), "allocate"); 119 rb_undef_method(CLASS_OF(xb_cTmp), "new"); 120 rb_define_method(xb_cTmp, "[]", RMF(xb_cxt_name_get), 1); 121