Data alignment issue on freetds-0.95.8x under HP-UX B.11.31 causes core dump

Mike Jetzer <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <CANm2B1mGXG7sEpeFAwFjCrv5w54GJTuGtyvGhQnH1f-GHZY8PQ@mail.gmail.com>
I had this issue when I first put up freetds-0.95.80 a couple of months
ago, and the problem persists in 0.95.88.

Compiled under HP-UX B.11.31 using the "cc: HP C/aC++ B3910B A.06.20 [May
13 2008]" compiler in 32-bit mode.  I initially compiled with "-O", but the
problem persists when compiling with "-g".

Relevant freetds.conf info; this refers to an SQL Server database:
        [testconn]
                host           = mkenday
                port           = 1433
                client charset = UTF-8
                tds version    = 7.3

Here's the table I'm using in my feasibility study:
        create table item
        (
        itm_num       nvarchar(40)  not null default '',
        itm_desc      nvarchar(33)  not null default '',
        shelf_life    integer       not null default 0,
        itm_wid       decimal (9,2) not null default 0.0,
        last_cc_dt_tm datetime2(3)  not null default '1980-01-01 00:00:00'
        )

And the one row of data I'm using:
        insert into item ( itm_num, shelf_life, itm_wid, last_cc_dt_tm )
        values ( 'ITM_NUM 12345', 1, 2.3, '2016-01-02 03:04:05')

FreeTDS cores when attempting to do a "select * from item", either using
tsql or the isql from unixODBC-2.3.4.  If I select only certain fields, it
may succeed, but if I "select *" or the wrong combination of fields, it
dumps core (the problem appears to be with the datetime2 field).

Running the tsql from 0.95.88 in gdb:
        $ gdb -q tsql
        (gdb) run -S testconn -U osb3prog1 -P osb3prog1
        Starting program: /u1/sqlprog/freetds-0.95.88/src/apps/tsql -S
testconn -U osb3prog1 -P osb3prog1
        locale is "en_US.utf8 en_US.utf8 en_US.utf8 en_US.utf8 C en_US.utf8"
        locale charset is "utf8"
        using default charset "UTF-8"
        [New process 2721]
        warning: reading register 584: No such process
        Detaching after fork from process 2721
        1> select * from item
        2> go
        itm_num itm_desc        shelf_life      itm_wid last_cc_dt_tm

        Program received signal SIGBUS, Bus error
          si_code: 1 - BUS_ADRALN - Invalid address alignment. Please refer
to the following link that helps in handling unaligned data:
http://docs.hp.com/en/7730/newhelp0610/pragmas.htm#pragma-pack-ex3.
        0x4096760:1 in tds_msdatetime_get (tds=0x4002b440, col=0x4005d890)
            at data.c:1110
        1110                    dt->time = u8;
        (gdb) p dt
        $1 = (struct {...} *) 0x40060ffc
        (gdb) p *dt
        $2 = {time = 0, date = 0, offset = 0, time_prec = 3, _res = 0,
has_time = 0,
          has_date = 0, has_offset = 0}
        (gdb) p &dt->time
        $3 = (unsigned long long *) 0x40060ffc
        (gdb) where
        #0  0x4096760:1 in tds_msdatetime_get (tds=0x4002b440,
col=0x4005d890)
            at data.c:1110
        #1  0x403c830:0 in tds_process_row (tds=0x4002b440) at token.c:1954
        #2  0x403fd00:0 in tds_process_tokens (tds=0x4002b440,
result_type=0x7fff7cb0,
            done_flags=0x0, flag=5384) at token.c:685
        #3  0x4026c60:0 in do_query (tds=0x4002b440,
            buf=0x4005a1d0 "select * from item\n", opt_flags=0) at
tsql.c:233
        #4  0x402c1d0:0 in main (argc=7, argv=0x7fff8380) at tsql.c:872

The URL to which gdb refers is no longer valid and HP doesn't have a
redirect for it, but refers to pragmas for aligning structures.  However,
dt is a pointer into the column_data field of a variable of type TDSCOLUMN,
which is just an "unsigned char *", so from my cursory reading of the
pragmas, this wouldn't help.  Additionally, there's a possibility that I'll
also need FreeTDS under Solaris, AIX, and Linux; as FreeTDS is OpenSource I
assume it'll work under Linux but am worried that the same issue might crop
up under Solaris and AIX.
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.