The problem described below can be triggered with perl 5.10 on x86_64
architecture. I don't have a minimal reproducer, but am able to
reproduce it with a fairly complex and seemingly unrelated activity
preceeding instantialization and calling parse().
I'd appreciate if you contacted me privately by e-mail in case the patch
below does not seem correct to you, or I did not describe the problem
well enough and you need to be able to reproduce the problem.
See http://netbsd.sk/~lkundrak/perl-Text-CSV_XS-0.52-svupgrade.patch
Under some circumstances, newSVpv() returns SV of higher type than
SVt_PVIV, such as SVt_PVMG.
Lubomir Rintel <lkundrak@v3.sk>
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);