diff options
Diffstat (limited to 'ext/dbm/dbm.c')
-rw-r--r-- | ext/dbm/dbm.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/ext/dbm/dbm.c b/ext/dbm/dbm.c index c422394405..e9e2a6e1e9 100644 --- a/ext/dbm/dbm.c +++ b/ext/dbm/dbm.c @@ -280,6 +280,14 @@ fdbm_values_at(argc, argv, obj) return new; } +static void +fdbm_modify(obj) + VALUE obj; +{ + rb_secure(4); + if (OBJ_FROZEN(obj)) rb_error_frozen("DBM"); +} + static VALUE fdbm_delete(obj, keystr) VALUE obj, keystr; @@ -289,7 +297,7 @@ fdbm_delete(obj, keystr) DBM *dbm; VALUE valstr; - rb_secure(4); + fdbm_modify(obj); StringValue(keystr); key.dptr = RSTRING(keystr)->ptr; key.dsize = RSTRING(keystr)->len; @@ -325,7 +333,7 @@ fdbm_shift(obj) DBM *dbm; VALUE keystr, valstr; - rb_secure(4); + fdbm_modify(obj); GetDBM(obj, dbmp); dbm = dbmp->di_dbm; dbmp->di_size = -1; @@ -351,7 +359,7 @@ fdbm_delete_if(obj) VALUE ret, ary = rb_ary_new(); int i, status = 0, n; - rb_secure(4); + fdbm_modify(obj); GetDBM(obj, dbmp); dbm = dbmp->di_dbm; n = dbmp->di_size; @@ -388,7 +396,7 @@ fdbm_clear(obj) struct dbmdata *dbmp; DBM *dbm; - rb_secure(4); + fdbm_modify(obj); GetDBM(obj, dbmp); dbm = dbmp->di_dbm; dbmp->di_size = -1; @@ -471,7 +479,7 @@ fdbm_store(obj, keystr, valstr) struct dbmdata *dbmp; DBM *dbm; - rb_secure(4); + fdbm_modify(obj); keystr = rb_obj_as_string(keystr); key.dptr = RSTRING(keystr)->ptr; |