--- BDB/BDB.xs 2008/09/26 02:03:48 1.54 +++ BDB/BDB.xs 2008/09/26 02:37:33 1.55 @@ -139,12 +139,16 @@ if (sv) { SvREADONLY_off (sv); - sv_setsv_mg (sv, dbt->data ? newSVpvn (dbt->data, dbt->size) : &PL_sv_undef); + + if (dbt->data) + sv_setpvn_mg (sv, dbt->data, dbt->size); + else + sv_setsv_mg (sv, &PL_sv_undef); + SvREFCNT_dec (sv); } - if (dbt->flags & DB_DBT_MALLOC) - free (dbt->data); + free (dbt->data); } enum {