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