Re: [BUG][PATCH] ecpg crash with bytea type and cursors

From: Michael Meskes <meskes(at)postgresql(dot)org>
To: pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: [BUG][PATCH] ecpg crash with bytea type and cursors
Date: 2020-06-30 16:38:08
Message-ID: 1451a00a0706d2f25fbcb580f6aef1e29c5b80a9.camel@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Hi,

On Tue, 2020-06-30 at 15:30 +0200, Jehan-Guillaume de Rorthais wrote:
> ...
> According to documentation and source, the bytea type is supposed to
> be handled
> as the varchar type. However, the original patch 050710b3696 miss to
> add to
> adjust_outofscope_cursor_vars() how to handle bytea type as variable.
> Because of
> this, bytea type was considered as an array of value, leading to the
> crash
> because type->u.element was all NULL. The patch adjust existing code
> to
> considers bytea in the same way varchar is handled. See in attachment
> patch
> v1-0002-Fix-ecpg-crash-with-bytea-and-cursor-variables.patch

Thanks for finding and fixing this. Patch committed.

> But there's something else the patch does not address and that might
> need to be
> adjusted. Existing tests were OK because they don't use cursors AND
> bytea vars
> are declared using a macro to hold their size. Eg.:
>
> bytea send_buf[2][DATA_SIZE]; # ok
> bytea send_buf[2][512]; # crash !
>
> This is because of this test in adjust_outofscope_cursor_vars()
> (before the
> proposed patch):
>
> else if ((ptr->variable->type->type != ECPGt_varchar
> && ptr->variable->type->type != ECPGt_char
> && ptr->variable->type->type != ECPGt_unsigned_char
> && ptr->variable->type->type != ECPGt_string)
> && atoi(ptr->variable->type->size) > 1)
>
> This test match and related code crash when the size is given as
> number because
> atoi(size) > 1. When using a macro to hold the size, this test
> doesn't
> match and the fallback else{} code doesn't crash, but it doesn't
> build the same
> variable neither (see indirection before ECPGget_var). I'm not sure
> how
> important it is for bytea/varchar type though. I don't know how to
> build a test
> case producing ECPGget_var for them.

I try to find some time to look into this.

Thanks again,

Michael
--
Michael Meskes
Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org)
Meskes at (Debian|Postgresql) dot Org
Jabber: michael at xmpp dot meskes dot org
VfL Borussia! Força Barça! SF 49ers! Use Debian GNU/Linux, PostgreSQL

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message David G. Johnston 2020-06-30 16:39:03 Re: BUG #16519: SET SESSION ROLE in plpgsql requires string literal.
Previous Message PG Bug reporting form 2020-06-30 16:20:03 BUG #16519: SET SESSION ROLE in plpgsql requires string literal.