Under some circumstances, newSVpv() returns SV of higher type than SVt_PVIV, such as SVt_PVMG. Lubomir Rintel Upstream: http://repo.or.cz/w/Text-CSV_XS.git?a=commit;h=72d4bab14e22e62699e90eeb306c606435ef31a6 diff -urp Text-CSV_XS-0.52.orig/CSV_XS.xs Text-CSV_XS-0.52/CSV_XS.xs --- Text-CSV_XS-0.52.orig/CSV_XS.xs 2008-06-17 12:20:00.000000000 +0200 +++ Text-CSV_XS-0.52/CSV_XS.xs 2008-07-08 14:42:33.000000000 +0200 @@ -181,7 +181,7 @@ static SV *SetDiag (csv_t *csv, int xse) while (xs_errors[i].xs_errno && xs_errors[i].xs_errno != xse) i++; if ((err = newSVpv (xs_errors[i].xs_errstr, 0))) { - sv_upgrade (err, SVt_PVIV); + SvUPGRADE (err, SVt_PVIV); SvIV_set (err, xse); SvIOK_on (err); hv_store (csv->self, "_ERROR_DIAG", 11, err, 0);