Re: PGSQL ODBC driver crash in CC_get_current_schema

Поиск
Список
Период
Сортировка
От Frank van der Aa - Vanboxtel BV
Тема Re: PGSQL ODBC driver crash in CC_get_current_schema
Дата
Msg-id 552B95AD.4010506@vanboxtel.nl
обсуждение исходный текст
Ответ на Re: PGSQL ODBC driver crash in CC_get_current_schema  (Heikki Linnakangas <hlinnaka@iki.fi>)
Ответы Re: PGSQL ODBC driver crash in CC_get_current_schema  (Heikki Linnakangas <hlinnaka@iki.fi>)
Список 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 по дате отправления:

Предыдущее
От: Jade Koskela
Дата:
Сообщение: Re: crash bug on closed connection
Следующее
От: "Vilches, Alejandro"
Дата:
Сообщение: Re: odbc vs. libpq performance