Re: PGSQL ODBC driver crash in CC_get_current_schema - Mailing list pgsql-odbc

From Frank van der Aa - Vanboxtel BV
Subject Re: PGSQL ODBC driver crash in CC_get_current_schema
Date
Msg-id 552B95AD.4010506@vanboxtel.nl
Whole thread Raw
In response to Re: PGSQL ODBC driver crash in CC_get_current_schema  (Heikki Linnakangas <hlinnaka@iki.fi>)
Responses Re: PGSQL ODBC driver crash in CC_get_current_schema
List pgsql-odbc
Hi Heikki,

thank you for adding additional fixes to solve this problem.

Do you have any idea when the next official release will be that includes this change?

Met vriendelijke groeten / Kind regards,

Frank van der Aa

Vanboxtel BV

T+31 (0) 492 327 333
F+31 (0) 492 324 326
Efvdaa@vanboxtel.nl
Iwww.vanboxtel.nl

Heikki Linnakangas schreef op 9-4-2015 om 20:56:
On 04/08/2015 11:50 AM, Frank van der Aa - Vanboxtel BV wrote:
Hi,

we are using the PostgreSQL 9.2.4 with ODBC driver 09.03.0400.

We experience a driver crash when, for some reason (e.g. insufficient
permissions), there is no schema set.

This happens because the strdup in the CC_get_current_schema function in
connection.c is executed while the 'select current_schema()' query
returned NULL.

We have created a patch to workaround the strdup when the result of
QR_get_value_backend_text is NULL:

# diff connection.c.orig connection.c
4073c4073,4081
<                               conn->current_schema =
strdup(QR_get_value_backend_text(res, 0, 0));
---
  >                       {
  >                               const char* value =
QR_get_value_backend_text(res, 0, 0);
  >
  >                               if (value == NULL)
  > conn->current_schema = NULL;
  >                               else
  > conn->current_schema = strdup(value);
  >
  >                       }

We have tested this patch in our environment and didn't experience any
problems. However, we don't oversee the entire code, but expect this not
to give any more problems.

Hmm. That's not a very complete fix. Not all of the callers of CC_get_current_schema() check for a NULL, so you'll still get a segfault in the caller in some cases. Also, the NULL current_schema value should be cached like a valid value, otherwise the driver will call current_schema() repeatedly.

Committed. I did those additional fixes, and added a test case to the regression suite. Thanks for the report!

- Heikki


Vanboxtel BV Kerkstraat 4 5427 BC Boekel KvK 16051676

pgsql-odbc by date:

Previous
From: Jade Koskela
Date:
Subject: Re: crash bug on closed connection
Next
From: "Vilches, Alejandro"
Date:
Subject: Re: odbc vs. libpq performance