Re: bug report

From: Oliver Jowett <oliver(at)opencloud(dot)com>
To: Vasiliev Ivan <biggod(at)folksnet(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: bug report
Date: 2004-06-05 00:22:35
Message-ID: 40C1124B.9010701@opencloud.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Vasiliev Ivan wrote:
> Hello All!
> I use a database with type UNICODE, execute query "select *
> from some_table". One field has type text. There are some Europe symbols,
> which code more than 128.

In theory this should be ok assuming the data was inserted with a
suitable client_encoding.

> In method
> private synchronized String Enconding#decodeUTF8(byte data[], int offset, int length)
> throws SQLException
> exeption ArrayIndexOutOfBoundsException occures in last else block:
> } else { // length == 2 (maybe add checking for length > 3, throw exception if it is
> y = data[i+1] & 0xFF;
> val = (z - 0xC0)* (pow2_6)+(y-0x80);
> l_cdata[j++] = (char) val;
> i+=2;
> }
> Then your PSQLException is created.

Do you have a sample schema & data that shows this problem so we can
reproduce it? Or can you capture the raw byte-by-byte data given to
decodeUTF8() that causes the problem?

> But I have made a trick :
> } catch (Exception l_e) {
> try {
> return new String(data, offset, length, "UTF-8");
> } catch(Exception e) {
> throw new PSQLException("postgresql.con.invalidchar", l_e);
> }
> }
> And, as no exception occures during string creation, your "fast code"
> decodeUTF8() has an error, I suppose....

I believe the String constructors *ignore* errors in the incoming data,
replacing them with placeholder characters.

Just to check, your JDBC application is not changing client_encoding, right?

-O

In response to

  • bug report at 2004-06-04 11:33:11 from Vasiliev Ivan

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Oliver Jowett 2004-06-05 00:36:01 Re: Transactions not idle but "idle in transaction" since
Previous Message Markus Schaber 2004-06-04 13:19:52 How to insert binary data