Обсуждение: PGSQL ODBC driver crash in CC_get_current_schema

Поиск
Список
Период
Сортировка

PGSQL ODBC driver crash in CC_get_current_schema

От
Frank van der Aa - Vanboxtel BV
Дата:
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.

Would you be able to include this patch in the next release of the ODBC driver? Feel free to contact in case of any questions.

--
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

Re: PGSQL ODBC driver crash in CC_get_current_schema

От
Heikki Linnakangas
Дата:
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



Re: PGSQL ODBC driver crash in CC_get_current_schema

От
Frank van der Aa - Vanboxtel BV
Дата:
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

Re: PGSQL ODBC driver crash in CC_get_current_schema

От
Heikki Linnakangas
Дата:
On 04/13/2015 01:08 PM, Frank van der Aa - Vanboxtel BV wrote:
> Do you have any idea when the next official release will be that
> includes this change?

No idea. We are long overdue for a release...

- Heikki