Re: Null Characters in Strings, Version 9.3.1 - Mailing list pgsql-odbc

From Hiroshi Inoue
Subject Re: Null Characters in Strings, Version 9.3.1
Date
Msg-id 5303F655.8000200@tpf.co.jp
Whole thread Raw
In response to Re: Null Characters in Strings, Version 9.3.1  (Heikki Linnakangas <hlinnakangas@vmware.com>)
Responses Re: Null Characters in Strings, Version 9.3.1
Re: Null Characters in Strings, Version 9.3.1
List pgsql-odbc
(2014/02/19 5:30), Heikki Linnakangas wrote:
> On 02/18/2014 09:39 PM, Nils Gösche wrote:
>> 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... ;-).
>
> Yep, it's quite verbose :-).
>
>>  I took a little example program from Microsoft's site and adapted
>> it.  The code is attached.
>
> I'm afraid I can't easily compile and execute that either, with all the
> Windows-ism's in it. Could you pick one of the regression test cases
> (e.g
> http://git.postgresql.org/gitweb/?p=psqlodbc.git;a=blob_plain;f=test/src/select-test.c;hb=HEAD),
> and modify it to reproduce the problem? And please also include the SQL
> statements to create the test table and data.
>
>>  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:
>
> Hmm. If you could pinpoint it to the exact commit that changed the
> behavior, that would help too.

Maybe it's caused by the commit 3666c87c1440862bde2e6b8f43ee585deed70d31
Author: Hiroshi Inoue <inoue@tpf.co.p>
Date:   Thu Aug 22 20:40:01 2013 +0900

     When LF->CR+LF conversion causes an buffer truncation, supress the
conversion (in case of unicode).

Nils, please try to turn off *LF <-> CR/LF conversion* option.
Anyway I can't think of the way to cure the problem other than putting
  back the commit.

regards,
Hiroshi Inoue



pgsql-odbc by date:

Previous
From: Nils Gösche
Date:
Subject: Re: Null Characters in Strings, Version 9.3.1
Next
From: Nils Gösche
Date:
Subject: Re: Null Characters in Strings, Version 9.3.1