Author: markt Date: Sun Mar 5 13:23:31 2006 New Revision: 383404 URL: http://svn.apache.org/viewcvs?rev=383404&view=rev Log: Fix bug 38814. Fix the Readers using the wrong character encoding by removing them. There is no need to convert bytes to characters and back again.
Modified: tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java Modified: tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java?rev=383404&r1=383403&r2=383404&view=diff ============================================================================== --- tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java (original) +++ tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java Sun Mar 5 13:23:31 2006 @@ -19,7 +19,6 @@ import java.io.BufferedOutputStream; import java.io.BufferedReader; -import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; @@ -27,7 +26,6 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; -import java.io.OutputStreamWriter; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Date; @@ -1639,7 +1637,6 @@ * with major modifications by Martin Dengler */ Runtime rt = null; - BufferedReader commandsStdOut = null; InputStream cgiOutput = null; BufferedReader commandsStdErr = null; BufferedOutputStream commandsStdIn = null; @@ -1737,17 +1734,6 @@ boolean isRunning = true; commandsStdErr = new BufferedReader (new InputStreamReader(proc.getErrorStream())); - BufferedWriter servletContainerStdout = null; - - try { - if (response.getOutputStream() != null) { - servletContainerStdout = - new BufferedWriter(new OutputStreamWriter - (response.getOutputStream())); - } - } catch (IOException ignored) { - //NOOP: no output will be written - } final BufferedReader stdErrRdr = commandsStdErr ; new Thread() { @@ -1760,7 +1746,6 @@ new HTTPHeaderInputStream(proc.getInputStream()); BufferedReader cgiHeaderReader = new BufferedReader(new InputStreamReader(cgiHeaderStream)); - boolean isBinaryContent = false; while (isRunning) { try { @@ -1783,56 +1768,34 @@ } else { response.addHeader(header , value); } - if ((header.toLowerCase().equals("content-type")) - && (!value.toLowerCase().startsWith("text"))) { - isBinaryContent = true; - } } else { log("runCGI: bad header line \"" + line + "\""); } } //write output - if (isBinaryContent) { - byte[] bBuf = new byte[2048]; - OutputStream out = response.getOutputStream(); - cgiOutput = proc.getInputStream(); + byte[] bBuf = new byte[2048]; + + OutputStream out = response.getOutputStream(); + cgiOutput = proc.getInputStream(); + + try { while ((bufRead = cgiOutput.read(bBuf)) != -1) { if (debug >= 4) { log("runCGI: output " + bufRead + - " bytes of binary data"); + " bytes of data"); } out.write(bBuf, 0, bufRead); } - } else { - commandsStdOut = new BufferedReader - (new InputStreamReader(proc.getInputStream())); - - char[] cBuf = new char[1024]; - try { - while ((bufRead = commandsStdOut.read(cBuf)) != -1) { - if (servletContainerStdout != null) { - if (debug >= 4) { - log("runCGI: write(\"" + - new String(cBuf, 0, bufRead) + "\")"); - } - servletContainerStdout.write(cBuf, 0, bufRead); - } - } - } finally { - // Attempt to consume any leftover byte if something bad happens, - // such as a socket disconnect on the servlet side; otherwise, the - // external process could hang - if (bufRead != -1) { - while ((bufRead = commandsStdOut.read(cBuf)) != -1) {} - } - } - - if (servletContainerStdout != null) { - servletContainerStdout.flush(); + } finally { + // Attempt to consume any leftover byte if something bad happens, + // such as a socket disconnect on the servlet side; otherwise, the + // external process could hang + if (bufRead != -1) { + while ((bufRead = cgiOutput.read(bBuf)) != -1) {} } } - + proc.exitValue(); // Throws exception if alive isRunning = false; @@ -1844,12 +1807,9 @@ } } } //replacement for Process.waitFor() + // Close the output stream used - if (isBinaryContent) { - cgiOutput.close(); - } else { - commandsStdOut.close(); - } + cgiOutput.close(); } /** --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]