From: <jbo...@li...> - 2005-12-29 18:09:55
|
Author: rem...@jb... Date: 2005-12-29 13:09:49 -0500 (Thu, 29 Dec 2005) New Revision: 1958 Modified: trunk/labs/jbossweb/src/share/classes/org/apache/catalina/servlets/CGIServlet.java Log: - Port patch. Modified: trunk/labs/jbossweb/src/share/classes/org/apache/catalina/servlets/CGIServlet.java =================================================================== --- trunk/labs/jbossweb/src/share/classes/org/apache/catalina/servlets/CGIServlet.java 2005-12-29 08:07:31 UTC (rev 1957) +++ trunk/labs/jbossweb/src/share/classes/org/apache/catalina/servlets/CGIServlet.java 2005-12-29 18:09:49 UTC (rev 1958) @@ -236,7 +236,7 @@ * * @author Martin T Dengler [ro...@ma...] * @author Amy Roh - * @version $Revision: 332846 $, $Date: 2005-11-12 22:55:40 +0100 (sam., 12 nov. 2005) $ + * @version $Revision: 359798 $, $Date: 2005-12-29 15:06:58 +0100 (jeu., 29 déc. 2005) $ * @since Tomcat 4.0 * */ @@ -709,7 +709,7 @@ * <p> * </p> * - * @version $Revision: 332846 $, $Date: 2005-11-12 22:55:40 +0100 (sam., 12 nov. 2005) $ + * @version $Revision: 359798 $, $Date: 2005-12-29 15:06:58 +0100 (jeu., 29 déc. 2005) $ * @since Tomcat 4.0 * */ @@ -1423,7 +1423,7 @@ * and <code>setResponse</code> methods, respectively. * </p> * - * @version $Revision: 332846 $, $Date: 2005-11-12 22:55:40 +0100 (sam., 12 nov. 2005) $ + * @version $Revision: 359798 $, $Date: 2005-12-29 15:06:58 +0100 (jeu., 29 déc. 2005) $ */ protected class CGIRunner { @@ -1772,10 +1772,7 @@ log("runCGI: addHeader(\"" + line + "\")"); } if (line.startsWith("HTTP")) { - //TODO: should set status codes (NPH support) - /* - * response.setStatus(getStatusCode(line)); - */ + response.setStatus(getStatus(line)); } else if (line.indexOf(":") >= 0) { String header = line.substring(0, line.indexOf(":")).trim(); @@ -1851,6 +1848,36 @@ } } + /** + * Parses the status header and extracts the status code. + * + * @param line The HTTP Status-Line (RFC2616, section 6.1) + * @return The extracted status code or the code representing an + * internal error if a valid status code cannot be extracted. + */ + private int getStatus(String line) { + int statusStart = line.indexOf(' '); + + if (statusStart < 0 || line.length() < statusStart + 4) { + // Not a valid status line + log ("runCGI: invalid status line:" + line); + return HttpServletResponse.SC_INTERNAL_SERVER_ERROR; + } + + String status = line.substring(statusStart + 1, statusStart + 4); + + int statusCode; + try { + statusCode = Integer.parseInt(status); + } catch (NumberFormatException nfe) { + // Not a valid status code + log ("runCGI: invalid status code:" + status); + return HttpServletResponse.SC_INTERNAL_SERVER_ERROR; + } + + return statusCode; + } + private void sendToLog(BufferedReader rdr) { String line = null; int lineCount = 0 ; |