Fwd: ODBC: SQLGetDescField returns incorrect length for SQL_DESC_COUNT field of APD

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Fwd: ODBC: SQLGetDescField returns incorrect length for SQL_DESC_COUNT field of APD

Tom Lane-2
Forwarding to correct list ...

------- Forwarded Message

Date:    Wed, 26 Jun 2019 19:00:58 +0300
From:    Werewolf <[hidden email]>
To:      [hidden email]
Subject: ODBC: SQLGetDescField returns incorrect length for SQL_DESC_COUNT
         field of APD

Field SQL_DESC_COUNT should fit into a variable of type SQLSMALLINT. But
when retrieving this field of APD SQLGetDescField returns SQLINTEGER
value. So memory corruption is possible in application using psqlodbc
driver.
Also the function returns an undefined error code -8.

The mistake is located here
https://git.postgresql.org/gitweb/?p=psqlodbc.git;a=blob;f=pgapi30.c;h=ba0dd6d731bbccd81392def43ae9b10e9c013aef;hb=HEAD#l1240

Just replace 'ret = SQL_IS_SMALLINT;' with 'rettype = SQL_IS_SMALLINT;'.

------- End of Forwarded Message


Reply | Threaded
Open this post in threaded view
|

Re: Fwd: ODBC: SQLGetDescField returns incorrect length for SQL_DESC_COUNT field of APD

Inoue, Hiroshi-2
Hi,

On 2019/06/27 1:35, Tom Lane wrote:

> Forwarding to correct list ...
>
> ------- Forwarded Message
>
> Date:    Wed, 26 Jun 2019 19:00:58 +0300
> From:    Werewolf <[hidden email]>
> To:      [hidden email]
> Subject: ODBC: SQLGetDescField returns incorrect length for SQL_DESC_COUNT
> field of APD
>
> Field SQL_DESC_COUNT should fit into a variable of type SQLSMALLINT. But
> when retrieving this field of APD SQLGetDescField returns SQLINTEGER
> value. So memory corruption is possible in application using psqlodbc
> driver.
> Also the function returns an undefined error code -8.
>
> The mistake is located here
> https://git.postgresql.org/gitweb/?p=psqlodbc.git;a=blob;f=pgapi30.c;h=ba0dd6d731bbccd81392def43ae9b10e9c013aef;hb=HEAD#l1240
>
> Just replace 'ret = SQL_IS_SMALLINT;' with 'rettype = SQL_IS_SMALLINT;'.

Oops, my mistake.
I would commit the fix.

thanks.
Hiroshi Inoue
>
> ------- End of Forwarded Message
>
>
>
> ---