Re: bug report - Mailing list pgsql-jdbc

From Oliver Jowett
Subject Re: bug report
Date
Msg-id 40C1124B.9010701@opencloud.com
Whole thread Raw
In response to bug report  (Vasiliev Ivan <biggod@folksnet.com>)
Responses unsubscribe..
List 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

pgsql-jdbc by date:

Previous
From: Manju Maliyekkal
Date:
Subject: asking help
Next
From: Oliver Jowett
Date:
Subject: Re: Transactions not idle but "idle in transaction" since