Re: [BUGS] BUG #5487: dblink failed with 63 bytes connection names

2010-06-01 Thread Heikki Linnakangas

On 01/06/10 05:55, Takahiro Itagaki wrote:

"Takahiro Itagaki"  wrote:


Contib/dblink module seems to have a bug in handling
connection names in NAMEDATALEN-1 bytes.


Here is a patch to fix the bug. I think it comes from wrong usage
of snprintf(NAMEDATALEN - 1). It just copies 62 bytes + \0.

In addition, it should be safe to use pg_mbcliplen() to truncate
extra bytes in connection names because we might return invalid
text when a multibyte character is at 62 or 63 bytes.


Hmm, seems that dblink should call truncate_identifier() for the 
truncation, to be consistent with truncation of table names etc.


I also spotted this in dblink.c:


/* first gather the server connstr options */
if (strlen(servername) < NAMEDATALEN)
foreign_server = GetForeignServerByName(servername, true);


I think that's wrong. We normally consistently truncate identifiers at 
creation and at use, so that if you create an object with a very long 
name and it's truncated, you can still refer to it with the untruncated 
name because all such references are truncated too.


--
  Heikki Linnakangas
  EnterpriseDB   http://www.enterprisedb.com

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #5487: dblink failed with 63 bytes connection names

2010-05-31 Thread Takahiro Itagaki

"Takahiro Itagaki"  wrote:

> Bug reference:  5487
> Logged by:  Takahiro Itagaki
> Email address:  itagaki.takah...@oss.ntt.co.jp
> Description:dblink failed with 63 bytes connection names
> Details: 
> 
> Contib/dblink module seems to have a bug in handling
> connection names in NAMEDATALEN-1 bytes.

Here is a patch to fix the bug. I think it comes from wrong usage
of snprintf(NAMEDATALEN - 1). It just copies 62 bytes + \0.

In addition, it should be safe to use pg_mbcliplen() to truncate
extra bytes in connection names because we might return invalid
text when a multibyte character is at 62 or 63 bytes.

Note that the fix should be ported to previous versions, too.


> It cannot use exiting connections with 63 bytes name
> in some cases. For example, we cannot disconnect
> such connections. Also, we can reconnect with the
> same name and will have two connections with the name.
> 
> =# SELECT dblink_connect(repeat('1234567890', 6) || 'ABC',
> 'host=localhost');
>  dblink_connect
> 
>  OK
> (1 row)
> 
> =# SELECT dblink_get_connections();
>   dblink_get_connections
> ---
>  {123456789012345678901234567890123456789012345678901234567890ABC}
> (1 row)
> 
> =# SELECT dblink_disconnect(repeat('1234567890', 6) || 'ABC');
> ERROR:  connection
> "123456789012345678901234567890123456789012345678901234567890ABC" not
> available

Regards,
---
Takahiro Itagaki
NTT Open Source Software Center



dblink_63bytes.patch
Description: Binary data

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


[BUGS] BUG #5487: dblink failed with 63 bytes connection names

2010-05-31 Thread Takahiro Itagaki

The following bug has been logged online:

Bug reference:  5487
Logged by:  Takahiro Itagaki
Email address:  itagaki.takah...@oss.ntt.co.jp
PostgreSQL version: 9.0beta1
Operating system:   Linux
Description:dblink failed with 63 bytes connection names
Details: 

Contib/dblink module seems to have a bug in handling
connection names in NAMEDATALEN-1 bytes.

It cannot use exiting connections with 63 bytes name
in some cases. For example, we cannot disconnect
such connections. Also, we can reconnect with the
same name and will have two connections with the name.

=# SELECT dblink_connect(repeat('1234567890', 6) || 'ABC',
'host=localhost');
 dblink_connect

 OK
(1 row)

=# SELECT dblink_get_connections();
  dblink_get_connections
---
 {123456789012345678901234567890123456789012345678901234567890ABC}
(1 row)

=# SELECT dblink_disconnect(repeat('1234567890', 6) || 'ABC');
ERROR:  connection
"123456789012345678901234567890123456789012345678901234567890ABC" not
available

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs