Re: Null Characters in Strings, Version 9.3.1

From: Nils Gösche <cartan(at)cartan(dot)de>
To: "'Heikki Linnakangas'" <hlinnakangas(at)vmware(dot)com>
Cc: <pgsql-odbc(at)postgresql(dot)org>
Subject: Re: Null Characters in Strings, Version 9.3.1
Date: 2014-02-18 19:39:46
Message-ID: 003b01cf2ce1$2e33bc80$8a9b3580$@de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Heikki wrote:

> On 02/18/2014 07:06 PM, Nils Gösche wrote:
> > I wrote:
> >
> >> If I retrieve the value in a C# program using the ODBC driver, I get
> >> a string that has a null character at position 459, but a total
> >> length of 487! The string up to position 458 is correct, but has
> now
> >> been extended with a null character and a few junk characters.
> >
> > Am I the only one thinking this is a serious bug?
>
> Maybe.. I don't have a C# environment to test this with; if you can
> write a small stand-alone C program to reproduce this and post it, I'll
> take a look.

Thanks! I have never written an ODBC program in C before. Wow, what a PITA... ;-). I took a little example program from Microsoft's site and adapted it. The code is attached. The essential point is at line 353:

if (wcslen(pThisBinding->wszBuffer) * sizeof(wchar_t) != pThisBinding->indPtr)
{
wprintf(L"2 * wcslen = %d, indPtr = %d\n", wcslen(pThisBinding->wszBuffer) * sizeof(wchar_t),
pThisBinding->indPtr);
}
else
{
wprintf(pThisBinding->fChar ? DISPLAY_FORMAT_C:DISPLAY_FORMAT,
PIPE,
pThisBinding->cDisplaySize,
pThisBinding->cDisplaySize,
pThisBinding->wszBuffer);
}

If I run this with version 9.2.1 of the driver (I am using 32 Bit here), it will go to the else clause and print the value of the text column. However, if I run this with the latest version, I get the following output:

Connected!
Enter SQL commands, type (control)Z to exit
SQL COMMAND>| body
|
2 * wcslen = 918, indPtr = 974
|

SQL COMMAND>
Disconnected.

(indPtr is what we got in the last parameter of SQLBindCol)

The numeric values here are consistent with the result I am getting in the C# program: There is a null character at character index 459, but the returned value is actually larger than that (974 bytes), resulting in a C# string with 487 characters!

Regards,
--
Nils Gösche
"Don't ask for whom the <CTRL-G> tolls."

Attachment Content-Type Size
CODBCHello.cpp text/plain 19.2 KB

In response to

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Heikki Linnakangas 2014-02-18 20:30:34 Re: Null Characters in Strings, Version 9.3.1
Previous Message Heikki Linnakangas 2014-02-18 17:19:11 Re: Null Characters in Strings, Version 9.3.1