2012/10/12  <ma...@apache.org>:
> Author: markt
> Date: Fri Oct 12 08:56:58 2012
> New Revision: 1397476
>
> URL: http://svn.apache.org/viewvc?rev=1397476&view=rev
> Log:
> Fix a long standing TODO so correct exceptions are thrown.
> Clean-up Javadoc.
>
> Modified:
>     tomcat/tc7.0.x/trunk/   (props changed)
>     tomcat/tc7.0.x/trunk/java/javax/servlet/http/HttpServlet.java
>     tomcat/tc7.0.x/trunk/java/javax/servlet/http/HttpServletRequest.java
>
> Propchange: tomcat/tc7.0.x/trunk/
> ------------------------------------------------------------------------------
>   Merged /tomcat/trunk:r1397464,1397466,1397472
>
> Modified: tomcat/tc7.0.x/trunk/java/javax/servlet/http/HttpServlet.java
> URL: 
> http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/javax/servlet/http/HttpServlet.java?rev=1397476&r1=1397475&r2=1397476&view=diff
> ==============================================================================
> --- tomcat/tc7.0.x/trunk/java/javax/servlet/http/HttpServlet.java (original)
> +++ tomcat/tc7.0.x/trunk/java/javax/servlet/http/HttpServlet.java Fri Oct 12 
> 08:56:58 2012
> @@ -837,14 +837,21 @@ class NoBodyOutputStream extends Servlet
>
>      @Override
>      public void write(byte buf[], int offset, int len) throws IOException {
> -        if (len >= 0) {
> -            contentLength += len;
> -        } else {
> -            // XXX
> -            // isn't this really an IllegalArgumentException?
> +        if (buf == null) {
> +            throw new NullPointerException(
> +                    lStrings.getString("err.io.nullArray"));
> +        }
>
> -            String msg = lStrings.getString("err.io.negativelength");
> -            throw new IOException(msg);
> +        if (offset < 0 || len < 0 || offset+len < buf.length) {

Two errors:
1. The above condition should be "offset+len > buf.length"

This went undetected by the test suite: none of the tests on the
buildbot are failing (besides the TestSsl x NIO one).  Well, usually
offset==0 and len==buf.length, so it is no wonder.

> +            String msg = lStrings.getString("err.io.indexOutOfBounds");
> +            Object[] msgArgs = new Object[3];
> +            msgArgs[0] = Integer.valueOf(offset);
> +            msgArgs[1] = Integer.valueOf(len);
> +            msgArgs[2] = Integer.valueOf(offset + len);

2. The above value for [2] should be Integer.valueOf(buf.length), as
the message pattern says:

err.io.indexOutOfBounds=Invalid offset [{0}] and / or length [{1}]
specified for array of size [{2}]

> +            msg = MessageFormat.format(msg, msgArgs);
> +            throw new IndexOutOfBoundsException(msg);
>          }
> +
> +        contentLength += len;
>      }
>  }
>

Best regards,
Konstantin Kolinko

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

Reply via email to