[freetds] Assertin failed: unknown bindtype with unknown varlen

Frediano Ziglio freddy77 at gmail.com
Fri Apr 3 16:48:57 EDT 2015


2015-04-01 9:04 GMT+01:00 LacaK <lacak at zoznam.sk>:
> Attached patch, which works for me ...
> Thanks
> -Laco.
>

I don't know... dbgetnull is a function which is declared only on our
public headers but is exported by our library. I would prefer if
dbgetnull does not throw an exception for invalid types/varlen

Frediano

>
>> Hi,
>> I get this error "unknown bindtype with unknown varlen" when calling
>> dbconvert() in dblib.
>> This is my situation:
>> I have table with VARBINARY column with value which is empty not null
>> (dbdatlen() = 0)
>> Then I call dbconvert with srctype=SQLBINARY, srclen=0,
>> desttype=SQLBINARY, destlen > 0 and I get above mentioned assertion.
>>
>> Looking into dbconvert there is in the begining (note condition:
>> srclen==0):
>>
>>     if (src == NULL || srclen == 0) {
>>         int bind = dbbindtype(desttype);
>>         int size = tds_get_size_by_type(desttype);
>>
>>         if (SYBCHAR == desttype) {
>>             if (destlen > 0) {
>>                 size = destlen;
>>                 bind = CHARBIND;
>>             } else {
>>                 size = 1;
>>                 bind = NTBSTRINGBIND;
>>             }
>>         }
>>
>>         dbgetnull(dbproc, bind, size, dest);   // <--- HERE OCCURS
>> ASSERTION
>>         return size;
>>     }
>>
>> Next look into dbgetnull():
>>
>>     /*
>>      * For variable-length types, nonpositive varlen indicates
>>      * buffer is "big enough" but also not to pad.
>>      * Apply terminator (if applicable) and go home.
>>      */
>>     if (varlen <= 0) {
>>         switch (bindtype) {
>>         case STRINGBIND:
>>         case NTBSTRINGBIND:
>>             varaddr[pnullrep->len] = '\0';
>>             /* fall thru */
>>         case CHARBIND:
>>         case VARYCHARBIND:
>> +      case BINARYBIND:       // <--- MISSING HERE ?
>> +      case VARYBINBIND:     // <--- MISSING HERE ?
>>             break;
>>
>> As BINARYBIND is not handled ATM default is executed:
>>         default:
>>             assert(!"unknown bindtype with unknown varlen");
>>
>> Can you please fix it ?
>> Thanks
>> -Laco.
>> _______________________________________________
>> FreeTDS mailing list
>> FreeTDS at lists.ibiblio.org
>> http://lists.ibiblio.org/mailman/listinfo/freetds
>>
>
> _______________________________________________
> FreeTDS mailing list
> FreeTDS at lists.ibiblio.org
> http://lists.ibiblio.org/mailman/listinfo/freetds
>


More information about the FreeTDS mailing list