aboutsummaryrefslogtreecommitdiff
path: root/databases/ruby-bdb/files/patch-src-env.c
diff options
context:
space:
mode:
Diffstat (limited to 'databases/ruby-bdb/files/patch-src-env.c')
-rw-r--r--databases/ruby-bdb/files/patch-src-env.c439
1 files changed, 439 insertions, 0 deletions
diff --git a/databases/ruby-bdb/files/patch-src-env.c b/databases/ruby-bdb/files/patch-src-env.c
new file mode 100644
index 000000000000..a8dcbc9d4f7e
--- /dev/null
+++ b/databases/ruby-bdb/files/patch-src-env.c
@@ -0,0 +1,439 @@
+--- src/env.c.orig 2011-04-06 19:35:39 UTC
++++ src/env.c
+@@ -67,8 +67,8 @@ bdb_env_rep_transport(DB_ENV *env, const DBT *control,
+ lsnobj = bdb_makelsn(obj);
+ Data_Get_Struct(lsnobj, struct dblsnst, lsnst);
+ MEMCPY(lsnst->lsn, lsn, DB_LSN, 1);
+- av = rb_tainted_str_new(control->data, control->size);
+- bv = rb_tainted_str_new(rec->data, rec->size);
++ av = rb_str_new(control->data, control->size);
++ bv = rb_str_new(rec->data, rec->size);
+ if (envst->rep_transport == 0) {
+ res = rb_funcall(obj, rb_intern("bdb_rep_transport"), 5, av, bv, lsnobj,
+ INT2FIX(envid), INT2FIX(flags));
+@@ -90,8 +90,8 @@ bdb_env_rep_transport(DB_ENV *env, const DBT *control,
+ bdb_ENV *envst;
+
+ GetIdEnv(obj, envst);
+- av = rb_tainted_str_new(control->data, control->size);
+- bv = rb_tainted_str_new(rec->data, rec->size);
++ av = rb_str_new(control->data, control->size);
++ bv = rb_str_new(rec->data, rec->size);
+ if (envst->rep_transport == 0) {
+ res = rb_funcall(obj, rb_intern("bdb_rep_transport"), 4, av, bv,
+ INT2FIX(envid), INT2FIX(flags));
+@@ -328,10 +328,10 @@ bdb_env_msgcall(const DB_ENV *dbenv, const char *msg)
+ return;
+ }
+ if (envst->msgcall == 0) {
+- rb_funcall(obj, id_msgcall, 1, rb_tainted_str_new2(msg));
++ rb_funcall(obj, id_msgcall, 1, rb_str_new_cstr(msg));
+ }
+ else {
+- rb_funcall(envst->msgcall, bdb_id_call, 1, rb_tainted_str_new2(msg));
++ rb_funcall(envst->msgcall, bdb_id_call, 1, rb_str_new_cstr(msg));
+ }
+ }
+
+@@ -508,7 +508,7 @@ bdb_env_set_notify(VALUE obj, VALUE a)
+
+
+ static VALUE
+-bdb_env_i_options(VALUE obj, VALUE db_stobj)
++bdb_env_i_options(VALUE obj, VALUE db_stobj, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
+ char *options;
+ DB_ENV *envp;
+@@ -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;
+@@ -1193,10 +1195,10 @@ bdb_env_open_db(int argc, VALUE *argv, VALUE obj)
+ argv[argc - 1] = rb_hash_new();
+ }
+ if (rb_obj_is_kind_of(obj, bdb_cEnv)) {
+- rb_hash_aset(argv[argc - 1], rb_tainted_str_new2("env"), obj);
++ rb_hash_aset(argv[argc - 1], rb_str_new_cstr("env"), obj);
+ }
+ else {
+- rb_hash_aset(argv[argc - 1], rb_tainted_str_new2("txn"), obj);
++ rb_hash_aset(argv[argc - 1], rb_str_new_cstr("txn"), obj);
+ }
+ return rb_funcall2(cl, rb_intern("new"), argc, argv);
+ }
+@@ -1206,7 +1208,7 @@ void
+ bdb_env_errcall(const DB_ENV *env, const char *errpfx, const char *msg)
+ {
+ bdb_errcall = 1;
+- bdb_errstr = rb_tainted_str_new2(msg);
++ bdb_errstr = rb_str_new_cstr(msg);
+ }
+
+ #else
+@@ -1215,7 +1217,7 @@ void
+ bdb_env_errcall(const char *errpfx, char *msg)
+ {
+ bdb_errcall = 1;
+- bdb_errstr = rb_tainted_str_new2(msg);
++ bdb_errstr = rb_str_new_cstr(msg);
+ }
+
+ #endif
+@@ -1303,7 +1305,7 @@ bdb_env_each_options(VALUE opt, VALUE stobj)
+ DB_ENV *envp;
+ struct db_stoptions *db_st;
+
+- res = rb_iterate(rb_each, opt, bdb_env_i_options, stobj);
++ res = rb_block_call(opt, rb_intern("each"), 0, NULL, bdb_env_i_options, stobj);
+ Data_Get_Struct(stobj, struct db_stoptions, db_st);
+ envp = db_st->env->envp;
+ #if HAVE_ST_DB_ENV_SET_LG_BSIZE
+@@ -1322,8 +1324,9 @@ bdb_env_each_options(VALUE opt, VALUE stobj)
+ }
+
+ static VALUE
+-bdb_env_s_i_options(VALUE obj, int *flags)
++bdb_env_s_i_options(VALUE obj, VALUE pflags, int _argc, const VALUE *_argv, VALUE _blockarg)
+ {
++ int *flags = (int *)pflags;
+ char *options;
+ VALUE key, value;
+
+@@ -1394,7 +1397,7 @@ bdb_env_s_new(int argc, VALUE *argv, VALUE obj)
+ envst->envp->db_errcall = bdb_env_errcall;
+ #else
+ if (argc && TYPE(argv[argc - 1]) == T_HASH) {
+- rb_iterate(rb_each, argv[argc - 1], bdb_env_s_i_options, (VALUE)&flags);
++ rb_block_call(argv[argc - 1], rb_intern("each"), 0, NULL, bdb_env_s_i_options, (VALUE)&flags);
+ }
+ bdb_test_error(db_env_create(&(envst->envp), flags));
+ envst->envp->set_errpfx(envst->envp, "BDB::");
+@@ -1406,7 +1409,7 @@ bdb_env_s_new(int argc, VALUE *argv, VALUE obj)
+ if (argc && TYPE(argv[argc - 1]) == T_HASH) {
+ VALUE value = Qnil;
+
+- rb_iterate(rb_each, argv[argc - 1], bdb_env_s_j_options, (VALUE)&value);
++ rb_block_call(argv[argc - 1], rb_intern("each"), 0, NULL, bdb_env_s_j_options, (VALUE)&value);
+ if (!NIL_P(value)) {
+ if (!rb_respond_to(value, bdb_id_call)) {
+ rb_raise(bdb_eFatal, "arg must respond to #call");
+@@ -1517,12 +1520,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);
+@@ -1621,7 +1628,7 @@ bdb_env_init(int argc, VALUE *argv, VALUE obj)
+ envst->options |= BDB_AUTO_COMMIT;
+ }
+ #endif
+- envst->home = rb_tainted_str_new2(db_home);
++ envst->home = rb_str_new_cstr(db_home);
+ OBJ_FREEZE(envst->home);
+ #if HAVE_CONST_DB_INIT_REP
+ if (flags & DB_INIT_REP) {
+@@ -1658,7 +1665,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);
+ }
+@@ -1754,13 +1763,13 @@ bdb_thread_init(int argc, VALUE *argv, VALUE obj)
+ if (rb_block_given_p()) {
+ #if HAVE_RB_BLOCK_CALL
+ return rb_block_call(obj, rb_intern("__bdb_thread_init__"), argc, argv,
+- rb_yield, obj);
++ (rb_block_call_func_t)rb_yield, obj);
+ #else
+ VALUE tmp[3];
+ tmp[0] = obj;
+ tmp[1] = (VALUE)argc;
+ tmp[2] = (VALUE)argv;
+- return rb_iterate((VALUE (*)(VALUE))bdb_env_iterate, (VALUE)tmp, rb_yield, obj);
++ return rb_block_call((VALUE)tmp, bdb_env_iterate, 0, NULL, (rb_block_call_func_t)rb_yield, obj);
+ #endif
+ }
+ return rb_funcall2(obj, rb_intern("__bdb_thread_init__"), argc, argv);
+@@ -1828,7 +1837,7 @@ bdb_env_i_conf(VALUE obj, VALUE a)
+ res = rb_ary_new();
+ if (dirs) {
+ for (i = 0; dirs[i] != NULL; i++) {
+- rb_ary_push(res, rb_tainted_str_new2(dirs[i]));
++ rb_ary_push(res, rb_str_new_cstr(dirs[i]));
+ }
+ }
+ return res;
+@@ -1844,7 +1853,7 @@ bdb_env_i_conf(VALUE obj, VALUE a)
+ if (strcmp(str, "home") == 0) {
+ bdb_test_error(envst->envp->get_home(envst->envp, &strval));
+ if (strval && strlen(strval)) {
+- return rb_tainted_str_new2(strval);
++ return rb_str_new_cstr(strval);
+ }
+ return Qnil;
+ }
+@@ -1859,7 +1868,7 @@ bdb_env_i_conf(VALUE obj, VALUE a)
+ if (strcmp(str, "lg_dir") == 0) {
+ bdb_test_error(envst->envp->get_lg_dir(envst->envp, &strval));
+ if (strval && strlen(strval)) {
+- return rb_tainted_str_new2(strval);
++ return rb_str_new_cstr(strval);
+ }
+ return Qnil;
+ }
+@@ -1961,7 +1970,7 @@ bdb_env_i_conf(VALUE obj, VALUE a)
+ if (strcmp(str, "tmp_dir") == 0) {
+ bdb_test_error(envst->envp->get_tmp_dir(envst->envp, &strval));
+ if (strval && strlen(strval)) {
+- return rb_tainted_str_new2(strval);
++ return rb_str_new_cstr(strval);
+ }
+ return Qnil;
+ }
+@@ -2343,10 +2352,10 @@ bdb_env_repmgr_site_list(VALUE obj)
+ res = rb_ary_new();
+ for (i = 0; i < count; i++) {
+ tmp = rb_hash_new();
+- rb_hash_aset(tmp, rb_tainted_str_new2("eid"), INT2NUM(list[i].eid));
+- rb_hash_aset(tmp, rb_tainted_str_new2("host"), rb_tainted_str_new2(list[i].host));
+- rb_hash_aset(tmp, rb_tainted_str_new2("port"), INT2NUM(list[i].port));
+- rb_hash_aset(tmp, rb_tainted_str_new2("status"), INT2NUM(list[i].status));
++ rb_hash_aset(tmp, rb_str_new_cstr("eid"), INT2NUM(list[i].eid));
++ rb_hash_aset(tmp, rb_str_new_cstr("host"), rb_str_new_cstr(list[i].host));
++ rb_hash_aset(tmp, rb_str_new_cstr("port"), INT2NUM(list[i].port));
++ rb_hash_aset(tmp, rb_str_new_cstr("status"), INT2NUM(list[i].status));
+ rb_ary_push(res, tmp);
+ }
+ free(list);
+@@ -2445,7 +2454,7 @@ bdb_env_rep_set_nsites(VALUE obj, VALUE a)
+ }
+
+ static VALUE
+-bdb_env_rep_get_nsites(VALUE obj, VALUE a)
++bdb_env_rep_get_nsites(VALUE obj)
+ {
+ bdb_ENV *envst;
+ int offon;
+@@ -2470,7 +2479,7 @@ bdb_env_rep_set_priority(VALUE obj, VALUE a)
+ }
+
+ static VALUE
+-bdb_env_rep_get_priority(VALUE obj, VALUE a)
++bdb_env_rep_get_priority(VALUE obj)
+ {
+ bdb_ENV *envst;
+ int offon;
+@@ -2571,102 +2580,102 @@ bdb_env_rep_stat(int argc, VALUE *argv, VALUE obj)
+ bdb_test_error(envst->envp->rep_stat(envst->envp, &bs, flags));
+ a = rb_hash_new();
+ #if HAVE_ST_DB_REP_STAT_ST_BULK_FILLS
+- rb_hash_aset(a, rb_tainted_str_new2("st_bulk_fills"), INT2NUM(bs->st_bulk_fills));
++ rb_hash_aset(a, rb_str_new_cstr("st_bulk_fills"), INT2NUM(bs->st_bulk_fills));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_BULK_OVERFLOWS
+- rb_hash_aset(a, rb_tainted_str_new2("st_bulk_overflows"), INT2NUM(bs->st_bulk_overflows));
++ rb_hash_aset(a, rb_str_new_cstr("st_bulk_overflows"), INT2NUM(bs->st_bulk_overflows));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_BULK_RECORDS
+- rb_hash_aset(a, rb_tainted_str_new2("st_bulk_records"), INT2NUM(bs->st_bulk_records));
++ rb_hash_aset(a, rb_str_new_cstr("st_bulk_records"), INT2NUM(bs->st_bulk_records));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_BULK_TRANSFERS
+- rb_hash_aset(a, rb_tainted_str_new2("st_bulk_transfers"), INT2NUM(bs->st_bulk_transfers));
++ rb_hash_aset(a, rb_str_new_cstr("st_bulk_transfers"), INT2NUM(bs->st_bulk_transfers));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_CLIENT_REREQUESTS
+- rb_hash_aset(a, rb_tainted_str_new2("st_client_rerequests"), INT2NUM(bs->st_client_rerequests));
++ rb_hash_aset(a, rb_str_new_cstr("st_client_rerequests"), INT2NUM(bs->st_client_rerequests));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_CLIENT_SVC_MISS
+- rb_hash_aset(a, rb_tainted_str_new2("st_client_svc_miss"), INT2NUM(bs->st_client_svc_miss));
++ rb_hash_aset(a, rb_str_new_cstr("st_client_svc_miss"), INT2NUM(bs->st_client_svc_miss));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_CLIENT_SVC_REQ
+- rb_hash_aset(a, rb_tainted_str_new2("st_client_svc_req"), INT2NUM(bs->st_client_svc_req));
++ rb_hash_aset(a, rb_str_new_cstr("st_client_svc_req"), INT2NUM(bs->st_client_svc_req));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_dupmasters"), INT2NUM(bs->st_dupmasters));
++ rb_hash_aset(a, rb_str_new_cstr("st_dupmasters"), INT2NUM(bs->st_dupmasters));
+ #if HAVE_ST_DB_REP_STAT_ST_EGEN
+- rb_hash_aset(a, rb_tainted_str_new2("st_egen"), INT2NUM(bs->st_egen));
++ rb_hash_aset(a, rb_str_new_cstr("st_egen"), INT2NUM(bs->st_egen));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_cur_winner"), INT2NUM(bs->st_election_cur_winner));
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_gen"), INT2NUM(bs->st_election_gen));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_cur_winner"), INT2NUM(bs->st_election_cur_winner));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_gen"), INT2NUM(bs->st_election_gen));
+
+ lsn = bdb_makelsn(obj);
+ Data_Get_Struct(lsn, struct dblsnst, lsnst);
+ MEMCPY(lsnst->lsn, &bs->st_election_lsn, DB_LSN, 1);
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_lsn"), lsn);
++ rb_hash_aset(a, rb_str_new_cstr("st_election_lsn"), lsn);
+
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_nsites"), INT2NUM(bs->st_election_nsites));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_nsites"), INT2NUM(bs->st_election_nsites));
+ #if HAVE_ST_DB_REP_STAT_ST_ELECTION_NVOTES
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_nvotes"), INT2NUM(bs->st_election_nvotes));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_nvotes"), INT2NUM(bs->st_election_nvotes));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_priority"), INT2NUM(bs->st_election_priority));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_priority"), INT2NUM(bs->st_election_priority));
+ #if HAVE_ST_DB_REP_STAT_ST_ELECTION_SEC
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_sec"), INT2NUM(bs->st_election_sec));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_sec"), INT2NUM(bs->st_election_sec));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_status"), INT2NUM(bs->st_election_status));
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_tiebreaker"), INT2NUM(bs->st_election_tiebreaker));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_status"), INT2NUM(bs->st_election_status));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_tiebreaker"), INT2NUM(bs->st_election_tiebreaker));
+ #if HAVE_ST_DB_REP_STAT_ST_ELECTION_USEC
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_usec"), INT2NUM(bs->st_election_usec));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_usec"), INT2NUM(bs->st_election_usec));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_election_votes"), INT2NUM(bs->st_election_votes));
+- rb_hash_aset(a, rb_tainted_str_new2("st_elections"), INT2NUM(bs->st_elections));
+- rb_hash_aset(a, rb_tainted_str_new2("st_elections_won"), INT2NUM(bs->st_elections_won));
+- rb_hash_aset(a, rb_tainted_str_new2("st_env_id"), INT2NUM(bs->st_env_id));
+- rb_hash_aset(a, rb_tainted_str_new2("st_env_priority"), INT2NUM(bs->st_env_priority));
+- rb_hash_aset(a, rb_tainted_str_new2("st_gen"), INT2NUM(bs->st_gen));
+- rb_hash_aset(a, rb_tainted_str_new2("st_log_duplicated"), INT2NUM(bs->st_log_duplicated));
+- rb_hash_aset(a, rb_tainted_str_new2("st_log_queued"), INT2NUM(bs->st_log_queued));
+- rb_hash_aset(a, rb_tainted_str_new2("st_log_queued_max"), INT2NUM(bs->st_log_queued_max));
+- rb_hash_aset(a, rb_tainted_str_new2("st_log_queued_total"), INT2NUM(bs->st_log_queued_total));
+- rb_hash_aset(a, rb_tainted_str_new2("st_log_records"), INT2NUM(bs->st_log_records));
+- rb_hash_aset(a, rb_tainted_str_new2("st_log_requested"), INT2NUM(bs->st_log_requested));
+- rb_hash_aset(a, rb_tainted_str_new2("st_master"), INT2NUM(bs->st_master));
+- rb_hash_aset(a, rb_tainted_str_new2("st_master_changes"), INT2NUM(bs->st_master_changes));
+- rb_hash_aset(a, rb_tainted_str_new2("st_msgs_badgen"), INT2NUM(bs->st_msgs_badgen));
+- rb_hash_aset(a, rb_tainted_str_new2("st_msgs_processed"), INT2NUM(bs->st_msgs_processed));
+- rb_hash_aset(a, rb_tainted_str_new2("st_msgs_recover"), INT2NUM(bs->st_msgs_recover));
+- rb_hash_aset(a, rb_tainted_str_new2("st_msgs_send_failures"), INT2NUM(bs->st_msgs_send_failures));
+- rb_hash_aset(a, rb_tainted_str_new2("st_msgs_sent"), INT2NUM(bs->st_msgs_sent));
+- rb_hash_aset(a, rb_tainted_str_new2("st_newsites"), INT2NUM(bs->st_newsites));
++ rb_hash_aset(a, rb_str_new_cstr("st_election_votes"), INT2NUM(bs->st_election_votes));
++ rb_hash_aset(a, rb_str_new_cstr("st_elections"), INT2NUM(bs->st_elections));
++ rb_hash_aset(a, rb_str_new_cstr("st_elections_won"), INT2NUM(bs->st_elections_won));
++ rb_hash_aset(a, rb_str_new_cstr("st_env_id"), INT2NUM(bs->st_env_id));
++ rb_hash_aset(a, rb_str_new_cstr("st_env_priority"), INT2NUM(bs->st_env_priority));
++ rb_hash_aset(a, rb_str_new_cstr("st_gen"), INT2NUM(bs->st_gen));
++ rb_hash_aset(a, rb_str_new_cstr("st_log_duplicated"), INT2NUM(bs->st_log_duplicated));
++ rb_hash_aset(a, rb_str_new_cstr("st_log_queued"), INT2NUM(bs->st_log_queued));
++ rb_hash_aset(a, rb_str_new_cstr("st_log_queued_max"), INT2NUM(bs->st_log_queued_max));
++ rb_hash_aset(a, rb_str_new_cstr("st_log_queued_total"), INT2NUM(bs->st_log_queued_total));
++ rb_hash_aset(a, rb_str_new_cstr("st_log_records"), INT2NUM(bs->st_log_records));
++ rb_hash_aset(a, rb_str_new_cstr("st_log_requested"), INT2NUM(bs->st_log_requested));
++ rb_hash_aset(a, rb_str_new_cstr("st_master"), INT2NUM(bs->st_master));
++ rb_hash_aset(a, rb_str_new_cstr("st_master_changes"), INT2NUM(bs->st_master_changes));
++ rb_hash_aset(a, rb_str_new_cstr("st_msgs_badgen"), INT2NUM(bs->st_msgs_badgen));
++ rb_hash_aset(a, rb_str_new_cstr("st_msgs_processed"), INT2NUM(bs->st_msgs_processed));
++ rb_hash_aset(a, rb_str_new_cstr("st_msgs_recover"), INT2NUM(bs->st_msgs_recover));
++ rb_hash_aset(a, rb_str_new_cstr("st_msgs_send_failures"), INT2NUM(bs->st_msgs_send_failures));
++ rb_hash_aset(a, rb_str_new_cstr("st_msgs_sent"), INT2NUM(bs->st_msgs_sent));
++ rb_hash_aset(a, rb_str_new_cstr("st_newsites"), INT2NUM(bs->st_newsites));
+
+ lsn = bdb_makelsn(obj);
+ Data_Get_Struct(lsn, struct dblsnst, lsnst);
+ MEMCPY(lsnst->lsn, &bs->st_next_lsn, DB_LSN, 1);
+- rb_hash_aset(a, rb_tainted_str_new2("st_next_lsn"), lsn);
++ rb_hash_aset(a, rb_str_new_cstr("st_next_lsn"), lsn);
+ #if HAVE_ST_DB_REP_STAT_ST_NEXT_PG
+- rb_hash_aset(a, rb_tainted_str_new2("st_next_pg"), INT2NUM(bs->st_next_pg));
++ rb_hash_aset(a, rb_str_new_cstr("st_next_pg"), INT2NUM(bs->st_next_pg));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_nsites"), INT2NUM(bs->st_nsites));
+- rb_hash_aset(a, rb_tainted_str_new2("st_nthrottles"), INT2NUM(bs->st_nthrottles));
+- rb_hash_aset(a, rb_tainted_str_new2("st_outdated"), INT2NUM(bs->st_outdated));
++ rb_hash_aset(a, rb_str_new_cstr("st_nsites"), INT2NUM(bs->st_nsites));
++ rb_hash_aset(a, rb_str_new_cstr("st_nthrottles"), INT2NUM(bs->st_nthrottles));
++ rb_hash_aset(a, rb_str_new_cstr("st_outdated"), INT2NUM(bs->st_outdated));
+ #if HAVE_ST_DB_REP_STAT_ST_PG_DUPLICATED
+- rb_hash_aset(a, rb_tainted_str_new2("st_pg_duplicated"), INT2NUM(bs->st_pg_duplicated));
++ rb_hash_aset(a, rb_str_new_cstr("st_pg_duplicated"), INT2NUM(bs->st_pg_duplicated));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_PG_RECORDS
+- rb_hash_aset(a, rb_tainted_str_new2("st_pg_records"), INT2NUM(bs->st_pg_records));
++ rb_hash_aset(a, rb_str_new_cstr("st_pg_records"), INT2NUM(bs->st_pg_records));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_PG_REQUESTED
+- rb_hash_aset(a, rb_tainted_str_new2("st_pg_requested"), INT2NUM(bs->st_pg_requested));
++ rb_hash_aset(a, rb_str_new_cstr("st_pg_requested"), INT2NUM(bs->st_pg_requested));
+ #endif
+ #if HAVE_ST_DB_REP_STAT_ST_STARTUP_COMPLETE
+- rb_hash_aset(a, rb_tainted_str_new2("st_startup_complete"), INT2NUM(bs->st_startup_complete));
++ rb_hash_aset(a, rb_str_new_cstr("st_startup_complete"), INT2NUM(bs->st_startup_complete));
+ #endif
+- rb_hash_aset(a, rb_tainted_str_new2("st_status"), INT2NUM(bs->st_status));
+- rb_hash_aset(a, rb_tainted_str_new2("st_txns_applied"), INT2NUM(bs->st_txns_applied));
++ rb_hash_aset(a, rb_str_new_cstr("st_status"), INT2NUM(bs->st_status));
++ rb_hash_aset(a, rb_str_new_cstr("st_txns_applied"), INT2NUM(bs->st_txns_applied));
+ lsn = bdb_makelsn(obj);
+ Data_Get_Struct(lsn, struct dblsnst, lsnst);
+ MEMCPY(lsnst->lsn, &bs->st_waiting_lsn, DB_LSN, 1);
+- rb_hash_aset(a, rb_tainted_str_new2("st_waiting_lsn"), lsn);
++ rb_hash_aset(a, rb_str_new_cstr("st_waiting_lsn"), lsn);
+ #if HAVE_ST_DB_REP_STAT_ST_WAITING_PG
+- rb_hash_aset(a, rb_tainted_str_new2("st_waiting_pg"), INT2NUM(bs->st_waiting_pg));
++ rb_hash_aset(a, rb_str_new_cstr("st_waiting_pg"), INT2NUM(bs->st_waiting_pg));
+ #endif
+ free(bs);
+ return a;
+@@ -2764,7 +2773,7 @@ bdb_env_rep_set_clockskew(VALUE obj, VALUE a, VALUE b)
+ }
+
+ static VALUE
+-bdb_env_rep_get_clockskew(VALUE obj, VALUE a)
++bdb_env_rep_get_clockskew(VALUE obj)
+ {
+ bdb_ENV *envst;
+ u_int32_t fast, slow;
+@@ -2791,7 +2800,7 @@ bdb_env_rep_set_request(VALUE obj, VALUE a, VALUE b)
+ }
+
+ static VALUE
+-bdb_env_rep_get_request(VALUE obj, VALUE a)
++bdb_env_rep_get_request(VALUE obj)
+ {
+ bdb_ENV *envst;
+ u_int32_t frmin, frmax;
+@@ -2816,7 +2825,7 @@ bdb_env_dir_mode(VALUE obj)
+ if (envst->envp->get_intermediate_dir_mode(envst->envp, &dir)) {
+ rb_raise(rb_eArgError, "invalid environment");
+ }
+- return rb_tainted_str_new2(dir);
++ return rb_str_new_cstr(dir);
+ }
+
+ #endif
+@@ -3012,7 +3021,7 @@ void bdb_init_env()
+ rb_define_method(bdb_cEnv, "rep_timeout?", bdb_env_rep_intern_timeout, 1);
+ #endif
+ #if HAVE_ST_DB_ENV_REP_STAT
+- rb_define_method(bdb_cEnv, "rep_stat", bdb_env_rep_stat, 0);
++ rb_define_method(bdb_cEnv, "rep_stat", bdb_env_rep_stat, -1);
+ #endif
+ #if HAVE_ST_DB_ENV_REP_SYNC
+ rb_define_method(bdb_cEnv, "rep_sync", bdb_env_rep_sync, -1);