[freetds] [PATCH] Problem with VARCHAR in sybase.

Eddy Pronk epronk at muftor.com
Mon Jul 7 08:42:41 EDT 2008


James K. Lowden wrote:
> Eddy Pronk wrote:
>   
>> The way I solved it for now inside libdbi right now is like this:
>>
>>     case CS_CHAR_TYPE:
>>     case CS_TEXT_TYPE:
>>     case CS_VARCHAR_TYPE:
>>     _type = DBI_TYPE_STRING;
>>     datafmt->format = CS_FMT_NULLTERM;
>>     ++datafmt->maxlength; /* 1 extra byte for \0 */
>>     break;
>>     
>
> That will make ct-lib happy, but I would worry the cure might be worse
> than the disease.  If datafmt->maxlength represents the size of an
> allocated buffer, increasing it without reallocating will write the NULL
> to unallocated memory, with predictable unpredictable [sic] results.  
>
> Looking forward to your results.  
>   
In dbd_freetds.c inside libdbi the allocation is done. I allocated 1byte 
extra as well, so that is fine.

I've seen your recent changes. I would expect with your changes if I 
remove the ++datafmt->maxlength; it would still work but it breaks.
So, from the way I use the API the behavior looks still the same. I've 
seen you added a new file to the unittests.
Are you willing to look at libdbi? I can send you a self contained 
example for libdbi with the same 'select name from destinations'.
The latest cvs code of libdbi-drivers contains my changes.

One question. Is the ctlib supposed to be bug-compatible with the 
libraries shipped with Sybase?
I mean, do you think it is possible to run the unittests on Solaris with 
the Sybase libraries?

Eddy



More information about the FreeTDS mailing list