Re: tds_get_size_by_type for SYBMSDATE

LacaK <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <[email protected]>
Frediano Ziglio  wrote / napísal(a):
> 2014-04-08 11:08 GMT+01:00 LacaK <[email protected]>:
>   
>> Hi,
>> when I look into tds_types.h (which is build on misc/types.csv) there is
>> function tds_get_size_by_type() used f.e. by dbconvert()
>> And for SYBMSDATE it returns 4 (IMO it is wrong set size=4 in types.csv)
>> Is it correct ?
>> (as far as I understand it should be size if struct which holds this data
>> type i.e.:
>> there should be:
>>  case SYMBSDATE:
>>  case SYMBSTIME:
>>  case SYMBSDATETIME2:
>>  case SYMBSDATETIMEOFFSET:
>>     return sizeof(TDS_DATETIMEALL);
>>
>> ?
>> When I change it this way, it works as expected for me.
>> Thanks
>> -Laco.
>>
>>     
>
>
> Well... could be... this function is used in a lot of places. As the
> fixed column is 0 I don't think should break anything.
>
> What did go wrong before you changed the code?
>   
Look please in src/dblib/dblib.c at dbconvert() function.
There is call to tds_get_size_by_type(desttype) used in case when 
"srctype == desttype"
And then return value (i.e. size) is used in: memcpy(dest, src, ret);
When size is wrong memcpy does not copy all data.
When tds_get_size_by_type() does not known "desttype" then -1 is 
returned, which in my environment causes freezing application.
(may be that memcpy expect as 3rd argument "unsigned size", so supplying 
-1 causes copy of large memory block)
(f.e. for desttype=SYBMSDATETIME2 there is in types.csv: size=-1, which 
causes that this type is omited when generating tds_types.h from 
types.pl ... )

As another example please look at SYBDATETIME, there is size=4 which 
correspondes to sizeof(TDS_DATETIME) and also sizeof(DBDATETIME) used by 
sybdb.h ... this is IMO correct ...

Sizeof(TDS_DATETIMEALL) = 24 so setting this size for MSDATE, MSTIME, 
MSDATETIME2, MSDATETIMEOFFSET should ge solution?

-Laco.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.