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
Re: [BUGS] Bug in create operator and/or initdb Re: [BUGS] Bug in create operator and/or initdb |
Список | 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 по дате отправления: