On Tue, Sep 19, 2006 at 02:47:18PM +0100, Martin J. Evans wrote:
> Hi,
> 
> Back in March this year Jonathan Gillespie reported the following
> error in DBD::ODBC test suite:
> 
> Can't change param 1 maxlen (51->50) after first bind at
> >t/20SqlServer.t line 180.
> 
> (see http://www.mail-archive.com/dbi-users@perl.org/msg26946.html).
> 
> The same version of DBI and DBD::ODBC works fine in perl 5.8.7 but
> fails in perl 5.8.8 and later. I've even tried 5.9.4. I never really
> got to the root of the problem but it appears:
> 
> in dbdimp.c did a:
> 
> svGrow(phs->sv, 50+1)
> 
> but
> 
> SvLEN(phs->sv) returns 52!
> 
> DBD::ODBC does not expect this so the test fails. Since this is
> continuing to fail in all Perl versions since 5.8.8 I really would
> like to get this sorted out. I've checked through the perl changes files and
> I cannot see anything that looks a possibility. Does anyone know why
> 
> If phs->sv is a SVt_NULL and you do:
> SvUPGRADE(phs->sv, SVt_PVNV)
> svGrow(phs->sv, 50+1)

svGrow should really be SvGROW. In fact there's no svGrow in perl
[...later...] or in DBD::ODBC. I'll assume you meant SvGROW and your
shift key got out of step.

> SvLEN(phs->sv) returns 52 in 5.8.8 onwards

SvLEN is the size of the buffer allocated to the string, not the
length of the current string in the buffer (which is SvCUR).

> but the same code returned 51 in 5.8.7 and earlier?

I don't have 5.8.8 handy and no time to grab it now (satellite link
down so I only have slow ISDN at the moment).

Perhaps SvLEN(phs->sv) was 52 before SvGROW was called?

Tim.

Reply via email to