Patch to solve memory protect violation and clear __error_number after call CC_lookup_characterset

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

Patch to solve memory protect violation and clear __error_number after call CC_lookup_characterset

martial.guex
Hello,

I have detected fatal memory error protection on call strdup
connectio.c(1045) and wrong setting conn.__error_number on CC_lookup_lo
when "select oid, typbasetype from pg_type where typname = 'lo'" doesn't
return any record.

I used this patch to solve the problem on debian stretch with
odbc-postgresql:amd64 version 1:09.05.0400-2.

--- psqlodbc-09.05.0400.orig/connection.c
+++ psqlodbc-09.05.0400/connection.c
@@ -1041,12 +1041,13 @@ CC_connect(ConnectionClass *self, char *
   if (retsend)
  retsend = CC_send_settings(self,
GET_NAME(self->connInfo.conn_settings));

- if (CC_get_errornumber(self) > 0)
+ if ((CC_get_errornumber(self) > 0) && (CC_get_errormsg(self) != NULL))
  saverr = strdup(CC_get_errormsg(self));
  CC_clear_error(self); /* clear any error */
  CC_lookup_lo(self); /* a hack to get the oid of
    our large object oid type */

+ CC_clear_error(self); /* clear any error */
  /* Multibyte handling */
  CC_lookup_characterset(self);
  if (CC_get_errornumber(self) > 0)

It's probably better to clear self.__error_number directly on
CC_lookup_lo and when error_number is equal 110.

Thank's for the job.


--
------------------------------------------
Martial Guex
Route des Alpes 7
1452 Les Rasses

Tél:     +41 24 454 46 35
Fax:     +41 24 454 46 32
Mobile:  +41 79 767 27 02
Email:   [hidden email]
WhatsApp:+41 79 767 27 02


Reply | Threaded
Open this post in threaded view
|

Re: Patch to solve memory protect violation and clear __error_number after call CC_lookup_characterset

Inoue, Hiroshi-2
Hello Martial,

The bugs were fixed in version 9.06.0500.
Please try the latest version(12.01.0000).

regards,
Hiroshi Inoue

On 2020/03/22 22:43, [hidden email] wrote:

> Hello,
>
> I have detected fatal memory error protection on call strdup
> connectio.c(1045) and wrong setting conn.__error_number on
> CC_lookup_lo when "select oid, typbasetype from pg_type where typname
> = 'lo'" doesn't return any record.
>
> I used this patch to solve the problem on debian stretch with
> odbc-postgresql:amd64 version 1:09.05.0400-2.
>
> --- psqlodbc-09.05.0400.orig/connection.c
> +++ psqlodbc-09.05.0400/connection.c
> @@ -1041,12 +1041,13 @@ CC_connect(ConnectionClass *self, char *
>   if (retsend)
>       retsend = CC_send_settings(self,
> GET_NAME(self->connInfo.conn_settings));
>
> -    if (CC_get_errornumber(self) > 0)
> +    if ((CC_get_errornumber(self) > 0) && (CC_get_errormsg(self) !=
> NULL))
>          saverr = strdup(CC_get_errormsg(self));
>      CC_clear_error(self);            /* clear any error */
>      CC_lookup_lo(self);            /* a hack to get the oid of
>                             our large object oid type */
>
> +    CC_clear_error(self);            /* clear any error */
>      /* Multibyte handling */
>      CC_lookup_characterset(self);
>      if (CC_get_errornumber(self) > 0)
>
> It's probably better to clear self.__error_number directly on
> CC_lookup_lo and when error_number is equal 110.
>
> Thank's for the job.