On 2011-10-31, Bear Giles wrote:

> I found a few issues (1330) with Fortify. As anyone who's used it knows the
> vast majority of those are of the "but that's what I intended" variety, but
> there were 180 cases of unclosed resource streams and 354 cases of
> potential denial of service.

> In the first case we all write

>   InputStream is = get some stream;
>   is.read();
>   is.close(); // maybe, or maybe we just let it go out of scope.

> but Fortify wants:

>   InputStream is = null;
>   try {
>       is = get some stream;
>       is.read();
>   } finally {
>      if (is != null) {
>        is.close();  // could possibly throw a second exception here
>      }

Do we have cases of this in the main source tree?  I know they are in
the tests but I'd expect the main tree to do just fine.

> In the second case we write something like:

>   public int read(byte[] b, int from, int length) throws IOException {
>      int read = in.read(b, from, length);
>      this.count(read);
>      return read;


> but Fortify wants something like

>   public int read(byte[] b, int from, int length) throws IOException {
>      if (b != null || b.length < length) {
>        throw new IllegalArgumentException("buffer must be at least " +
> length + " bytes long.");
>      }
>      // and probably also
>      if (from < 0 || length < 1) {
>        throw new IllegalArgumentException("...");
>      }

>      int read = in.read(b, from, length);
>      this.count(read);
>      return read;

> which is hard to argue with even though it will take a little longer to
> execute.

I'm with the shool of thought that expects the wrapped stream to deal
with it 8-)

> Is this something worth addressing now or should it wait until 2.0?

Let's do this for the next release.  Whether this is 1.4 or 2.0.

Thanks

        Stefan

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to