Re: [BUGS] Bug in create operator and/or initdb

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: [BUGS] Bug in create operator and/or initdb
Дата
Msg-id 20593.1107191786@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: [BUGS] Bug in create operator and/or initdb  (Steve Atkins <steve@blighty.com>)
Ответы Re: [BUGS] Bug in create operator and/or initdb  (Greg Stark <gsstark@mit.edu>)
Re: [BUGS] Bug in create operator and/or initdb  (Steve Atkins <steve@blighty.com>)
Re: [BUGS] Bug in create operator and/or initdb  (Paul Vixie <paul@vix.com>)
Список pgsql-hackers
Steve Atkins <steve@blighty.com> writes:
> The cidr type, including it's external interface, is simply broken.

That is a large claim that I don't think you have demonstrated.
The only one of your examples that seems to me to contradict the
documentation is this one:
steve=# select '224.0.0.0'::cidr;     cidr      -------------  224.0.0.0/4

which should be /32 according to what the docs say:

: If y is omitted, it is calculated using assumptions from the older
: classful network numbering system, except that it will be at least large
: enough to include all of the octets written in the input.

The bogus netmask is in turn responsible for this case:
 steve=# select '224.10.0.0'::cidr; ERROR:  invalid cidr value: "224.10.0.0" DETAIL:  Value has bits set to right of
mask.


Looking at the source code, there seems to be a special case for "class D"
network numbers that causes the code not to extend y to cover the
supplied inputs:
   /* If no CIDR spec was given, infer width from net class. */   if (bits == -1)   {       if (*odst >= 240)        /*
ClassE */           bits = 32;       else if (*odst >= 224)    /* Class D */           bits = 4;       else if (*odst
>=192)    /* Class C */           bits = 24;       else if (*odst >= 128)    /* Class B */           bits = 16;
else                     /* Class A */           bits = 8;       /* If imputed mask is narrower than specified octets,
widen.*/       if (bits >= 8 && bits < ((dst - odst) * 8))           ^^^^^^^^^           bits = (dst - odst) * 8;   }
 

I think the test for "bits >= 8" should be removed.  Does anyone know
why it's there?
        regards, tom lane


В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Marc G. Fournier"
Дата:
Сообщение: Bundles running late ...
Следующее
От: Josh Berkus
Дата:
Сообщение: Re: [pgsql-hackers] Patent issues and 8.1