Thread: A proper fix for the conversion-function problem

A proper fix for the conversion-function problem

From
Tom Lane
Date:
I tried disabling public EXECUTE access on the built-in conversion
functions, as we recommended yesterday, and found that it has one
small problem: the conversion regression test fails.  The test is
expecting that unprivileged users can create conversions, but since
CREATE CONVERSION requires you to have execute permissions on the
specified function, they can't if we do this.

This leaves me thinking that the best fix for the back branches
is the one Andrew@supernews originally suggested: modify the
signature for conversion functions to use INTERNAL instead of CSTRING.
I haven't actually experimented with that yet, but will shortly.

Going forward, though, I really think we need to revisit the API
for conversion functions.  It seems a bit silly to have the
infrastructure to let ordinary users create conversions if they
can't create the functions needed to support them.
        regards, tom lane


Re: A proper fix for the conversion-function problem

From
Tatsuo Ishii
Date:
> I tried disabling public EXECUTE access on the built-in conversion
> functions, as we recommended yesterday, and found that it has one
> small problem: the conversion regression test fails.  The test is
> expecting that unprivileged users can create conversions, but since
> CREATE CONVERSION requires you to have execute permissions on the
> specified function, they can't if we do this.
> 
> This leaves me thinking that the best fix for the back branches
> is the one Andrew@supernews originally suggested: modify the
> signature for conversion functions to use INTERNAL instead of CSTRING.
> I haven't actually experimented with that yet, but will shortly.
> 
> Going forward, though, I really think we need to revisit the API
> for conversion functions.  It seems a bit silly to have the
> infrastructure to let ordinary users create conversions if they
> can't create the functions needed to support them.

Why? Since the functions need to be written in C language, ordinary
users cannot make them anyway. Same thing can be said to CREATE TYPE.
--
Tatsuo Ishii


Re: A proper fix for the conversion-function problem

From
Tom Lane
Date:
Tatsuo Ishii <t-ishii@sra.co.jp> writes:
>> Going forward, though, I really think we need to revisit the API
>> for conversion functions.  It seems a bit silly to have the
>> infrastructure to let ordinary users create conversions if they
>> can't create the functions needed to support them.

> Why? Since the functions need to be written in C language, ordinary
> users cannot make them anyway. Same thing can be said to CREATE TYPE.

Isn't that a circular argument?  If the API were not deliberately
designed to make it C-only, you could usefully code conversions in
string-hacking-friendly languages like Perl.

I'd really like to simplify the conversion function signature to
something likeconvert(bytea) returns bytea
or possiblyconvert(cstring) returns cstring
depending on whether you think that it's important to be able to pass
zero bytes transparently.  (The current encoding infrastructure seems
pretty confused about that point --- there are null-terminated strings
in some places and counts in others.  Are there any encodings we care
about that require embedded zero bytes?)
        regards, tom lane


Re: A proper fix for the conversion-function problem

From
"John Hansen"
Date:
> Are there any encodings we care about that require embedded zero
bytes?

UTF-8 does!


Re: A proper fix for the conversion-function problem

From
Andrew - Supernews
Date:
On 2005-05-04, "John Hansen" <john@geeknet.com.au> wrote:
>> Are there any encodings we care about that require embedded zero
>> bytes?
>
> UTF-8 does!

nonsense

-- 
Andrew, Supernews
http://www.supernews.com - individual and corporate NNTP services


Re: A proper fix for the conversion-function problem

From
Tom Lane
Date:
"John Hansen" <john@geeknet.com.au> writes:
>> Are there any encodings we care about that require embedded zero
> bytes?

> UTF-8 does!

Surely not.  Were you thinking of UTF-16 or UCS-2 or whatever it's
called?
        regards, tom lane


Re: A proper fix for the conversion-function problem

From
"John Hansen"
Date:
Errm.. UTF-16/32

> -----Original Message-----
> From: pgsql-hackers-owner@postgresql.org
> [mailto:pgsql-hackers-owner@postgresql.org] On Behalf Of John Hansen
> Sent: Wednesday, May 04, 2005 1:22 PM
> To: Tom Lane; Tatsuo Ishii
> Cc: pgsql-hackers@postgresql.org
> Subject: Re: [HACKERS] A proper fix for the
> conversion-function problem
>
> > Are there any encodings we care about that require embedded zero
> bytes?
>
> UTF-8 does!
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
>                http://archives.postgresql.org
>
>


Re: A proper fix for the conversion-function problem

From
Tom Lane
Date:
"John Hansen" <john@geeknet.com.au> writes:
> Errm.. UTF-16/32

Ah, I thought that was what you meant.

Right now we have a *ton* of problems with supporting encodings that
need embedded zero bytes, because there are APIs all over the place
that use zero-terminated strings.  I don't foresee that it will ever
be worth the trouble to make such encodings work natively inside the
backend.  It might possibly be worth the trouble to allow 'em as client
encodings ... but that would require fixing not just the encoding
converters, but the FE/BE protocol, libpq, psql, pg_dump, and who knows
what other client-side software.

If we're willing to make a commitment to go down that long hard road,
it'd make sense to define the encoding conversion API to support strings
with embedded nulls.  Personally I'm agin it --- I think that the needed
development effort would be better spent elsewhere.  But my personal
needs don't stretch further than 7-bit ASCII so maybe I'm not the best
guy to make such decisions.
        regards, tom lane