code review request: 7099399: cannot deal with CRL file larger than 16MB
Weijun Wang
weijun.wang at oracle.com
Tue Oct 11 20:06:51 UTC 2011
On 10/11/2011 12:50 PM, Michael StJohns wrote:
> Two things -
>
> 1) Why not just extend this to support "unsigned" long rather than just the 32 bit value - not saying it will be needed, but seems like you might as well do this once.
Well, InputStream::read only supports 32-bit int, and array length is
also 32-bit int. Trying to read so many bytes will be quite complicated.
>
> 2) How about cleaning up this section of code and moving it to an iterative model:
Yes, your codes look more correct. However, this is a regression bug and
we need to fix it fast and with zero risk. Therefore, I choose this
stupid and lazy code change.
Thanks
Max
>
> long length = 0;
>
> if (n< 0x80)
> length = n;
> else if (n == 0x80) {
> // indefinite encoding
> } else {
> int bytecount = (n&0x7f);
> int lencount = bytecount; // needed to do a write to bout
> int tempbyte;
> is.mark(8);
> if (bytecount> 8)
> error; // can't fit this in a long
>
> do {
> tempbyte = is.read();
> if (tempbyte == -1)
> error - encoding EOL;
> if ((length& 0x7f) != 0& bytecount == 8)
> error; // can't do an unsigned long
>
> length = (length<< 8) | tempbyte;
> bytecount--;
> } while (bytecount> 0);
>
> is.reset();
> for (int i = 0; i< lencount; i++) {
> bout.write(is.read());
> }
>
> }
>
>
> At 09:05 PM 10/10/2011, Weijun Wang wrote:
>> Webrev at http://cr.openjdk.java.net/~weijun/7099399/webrev.00/
>>
>> Basically, we're now accepting X.509 block of 4-octets length. For simplicity, the highest byte must be<= 127, so that the length can be expressed with a 32-bit int.
>>
>> Thanks
>> Max
>>
>>
>> -------- Original Message --------
>> *Change Request ID*: 7099399
>> *Synopsis*: cannot deal with CRL file larger than 16MB
>>
>> Product: java
>> Category: java
>> Subcategory: classes_security
>> Type: Defect
>>
>> === *Description* ============================================================
>> The X.509 impl of CertificateFactory only parses X.509 blocks smaller than 16MB, i.e. when the length can be encoded in 3 octets. Now we have a customer whose CRL file is as big as 30MB.
>
>
More information about the security-dev
mailing list