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