On May 25, 2009, at 6:47 PM, Xuelei Fan wrote:

1.
116         byte[] buffer = new byte[length];

I would like to use a fixed length, such as 1024, for memory saving for large data. Just a very very personal preference.

I see what you mean. My attempt was read it in a single shot. Will think about it.


2. 562 ~ 567
You assume that the end character of a line is the same for all lines. That's OK, I just worry about the situation that a program generated input steam, which would include more than one of CR, LF, CR+LF as line end character. Hopefully, it is not a issue.

Guess it's even more less an issue if \n is tried.


3. 584 ~ EOF
You assume that the tag occupy only one byte, that's incorrect, the tag would occupy more than one byte when it is bigger than 30. The assume would make the following length parser code incorrect.

You assume that the end of indefinite length is only one zero byte, that's incorrect, it is zero of two bytes.

readBERInternal() reads 2 bytes at EOC, on 588 and 595.


You does not handle content longer than 10K(L>0x82). I don't think 10K is enough, maybe you need to handle 0x83, even 0x84 before regarding the content is too hug.

OK. I would support 0x83 and 0x84. The multiple byte tag is never supported by DerValue related classes, so I guess it's not necessary to add it here.

Thanks
Max


Weijun Wang wrote:
Hi Sean and/or Andrew

Can any of you take a review at this bug fix:

 bug:
    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6813340
 webrev:
    http://cr.openjdk.java.net/~weijun/6813340/webrev.02/

The bug is about too many is.available() usage in
X509Factory.generateXXX() methods. This means a slow stream might not be
consumed at all.

The fix introduces a new method readOneBlock() which reads a block of
data, either PEM or DER, in block mode. The method neither uses
available() nor performs any mark/reset actions.

There might be two drawbacks for this code change:

1. In order to avoid mark/reset, it uses a heuristic method to detect
the line ending of a PEM file: If the -----BEGIN----- line ends with
'\r' (or \n), it assumes the -----END---- line also ends with it. I
don't know if there are files which is hybrid. I might make another
change if you want more safety:

564  -               if (next == -1 || next == end) {
564  +               if (next == -1 || next == end || next == '\n') {


See above, I would like the safer one.

Andrew
2. Since no buffering is made, the performance might hurt. However, I
simply browse the usage in JDK and find many callers actually use a
ByteArrayInputStream, so this is not a serious problem.

Thanks
Max


Reply via email to