Skip site navigation (1) Skip section navigation (2)

Re: GetNewOidWithIndex can cause infinite loop on user tables(not catalog).

From: "Heikki Linnakangas" <heikki(at)enterprisedb(dot)com>
To: "Jacky Leng" <lengjianquan(at)163(dot)com>
Cc: <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: GetNewOidWithIndex can cause infinite loop on user tables(not catalog).
Date: 2008-02-20 11:00:35
Message-ID: 47BC0853.2070307@enterprisedb.com (view raw or flat)
Thread:
Lists: pgsql-bugs
Jacky Leng wrote:
> e.g.
> --Create table t(a int) with oids;
> --create unique index it on t(oid);
> --insert 4G-16384 rows into t;
> --insert into t values(1);
>     As all oids has been used, GetNewObjectId will never find a usable Oid, 
> so..... 

GetNewObjectId doesn't try to guarantee uniqueness. You will get 
duplicate oids, unless you have a unique index on the oid column.

If you do have a unique index, you will get into an endless loop in 
GetNewOidWithIndex. Therefore: don't do that.

At worst, you might be able to turn this into a denial-of-service 
attack, by something like 2^32 CREATE TEMPORARY TABLE calls, using up 
the OID space of pg_class. But if you have access to CREATE TEMPORARY 
TABLE, there's plenty of other ways to launch a DoS attack, so I 
wouldn't worry about this too much.

Per documentation of CREATE TABLE:

> Using OIDs in new applications is not recommended: where possible, using a SERIAL or other sequence generator as the table's primary key is preferred.

A sequence will give you more control over wrap-around as well.

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

In response to

Responses

pgsql-bugs by date

Next:From: Francisco Olarte SanzDate: 2008-02-20 11:21:03
Subject: Re: BUG #3965: UNIQUE constraint fails on long column values
Previous:From: Jacky LengDate: 2008-02-20 09:53:20
Subject: GetNewOidWithIndex can cause infinite loop on user tables(not catalog).

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group