Thread: Patch to solve memory protect violation and clear __error_numberafter call CC_lookup_characterset
Patch to solve memory protect violation and clear __error_numberafter call CC_lookup_characterset
From
martial.guex@mutech.ch
Date:
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: martial.guex@mutech.ch WhatsApp:+41 79 767 27 02
Re: Patch to solve memory protect violation and clear __error_numberafter call CC_lookup_characterset
From
"Inoue, Hiroshi"
Date:
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, martial.guex@mutech.ch 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.