It's better to submit these through Bugzilla, so they don't get lost.
http://struts.apache.org/using.html#Patches
-Ted.
On Tue, 24 Aug 2004 22:00:41 -0400, Dave Brosius wrote:
>
>
>�----- Original Message -----
>�From: "Dave Brosius" <[EMAIL PROTECTED]>
>�To: <[EMAIL PROTECTED]>
>�Sent: Tuesday, August 24, 2004 9:58 PM
>�Subject: patch to make sure streams get closed
>
>
>>�This patch makes sure streams are closed even on exception paths.
>>
>�Hmmm, the list strips attachments?
>
>�----------------------------
>�Index: src/share/org/apache/struts/taglib/bean/IncludeTag.java
>�===================================================================
>�RCS file:
>�/home/cvspublic/jakarta-
>�struts/src/share/org/apache/struts/taglib/bean/Inclu deTag.java,v
>�retrieving revision 1.30 diff -u -r1.30 IncludeTag.java
>�--- src/share/org/apache/struts/taglib/bean/IncludeTag.java 14 Mar
>�2004 06:23:45 -0000 1.30
>�+++ src/share/org/apache/struts/taglib/bean/IncludeTag.java 25 Aug
>�2004 01:49:33 -0000 @@ -154,13 +154,13 @@
>
>�protected boolean useLocalEncoding = false;
>
>�- public boolean isUseLocalEncoding() {
>�- �return useLocalEncoding;
>�- }
>�-
>�- public void setUseLocalEncoding(boolean b) {
>�- �useLocalEncoding = b;
>�- }
>�+ � �public boolean isUseLocalEncoding() {
>�+ � � � �return useLocalEncoding;
>�+ � �}
>�+
>�+ � �public void setUseLocalEncoding(boolean b) {
>�+ � � � �useLocalEncoding = b;
>�+ � �}
>
>�// --------------------------------------------------------- Public
>�Methods
>
>�@@ -221,9 +221,10 @@
>
>�// Copy the contents of this URL
>�StringBuffer sb = new StringBuffer();
>�+ � � � �InputStreamReader in = null;
>�try {
>�BufferedInputStream is = new
>�BufferedInputStream(conn.getInputStream());
>�- � � � � � �InputStreamReader in = new InputStreamReader(is); //
>�FIXME - encoding
>�+ � � � � � �in = new InputStreamReader(is); // FIXME - encoding
>�char buffer[] = new char[BUFFER_SIZE]; int n = 0; while (true) { @@
>�-232,11 +233,17 @@ break; sb.append(buffer, 0, n); } -
>�in.close(); } catch (Exception e) {
>�TagUtils.getInstance().saveException(pageContext, e); throw new
>�JspException(
>�messages.getMessage("include.read", url.toString(), e.toString()));
>�+ � � � �} + � � � �finally { + � � � � � �try { +
>�if (in != null) + � � � � � � � � � �in.close(); + � � � � � �}
>�catch (Exception ioe) { + � � � � � �} }
>
>�// Define the retrieved content as a page scope attribute Index:
>�src/share/org/apache/struts/taglib/bean/ResourceTag.java
>�===================================================================
>�RCS file:
>�/home/cvspublic/jakarta-
>�struts/src/share/org/apache/struts/taglib/bean/Resou rceTag.java,v
>�retrieving revision 1.16 diff -u -r1.16 ResourceTag.java
>�--- src/share/org/apache/struts/taglib/bean/ResourceTag.java 14 Mar
>�2004 06:23:45 -0000 1.16
>�+++ src/share/org/apache/struts/taglib/bean/ResourceTag.java 25 Aug
>�2004 01:49:35 -0000 @@ -120,9 +120,10 @@ }
>
>�// Accumulate the contents of this resource into a StringBuffer +
>� � � InputStreamReader reader = null; try { StringBuffer sb = new
>�StringBuffer();
>�- � � � � � �InputStreamReader reader = new
>�InputStreamReader(stream); + � � � � � �reader = new
>�InputStreamReader(stream); char buffer[] = new char[BUFFER_SIZE];
>�int n = 0; while (true) { @@ -132,12 +133,18 @@ } sb.append(buffer,
>�0, n); } - � � � � � �reader.close();
>�pageContext.setAttribute(id, sb.toString());
>
>�} catch (IOException e) {
>�TagUtils.getInstance().saveException(pageContext, e); throw new
>�JspException(messages.getMessage("resource.get", name)); + � � � �}
>�+ � � � �finally { + � � � � � �try { + � � � � � � � �if (reader !
>�= null) + � � � � � � � � � �reader.close(); + � � � � � �} catch
>�(Exception ioe) { + � � � � � �} }
>
>�return (SKIP_BODY);
>�Index: src/share/org/apache/struts/upload/DiskFile.java
>�===================================================================
>�RCS file:
>�/home/cvspublic/jakarta-
>�struts/src/share/org/apache/struts/upload/DiskFile.j ava,v
>�retrieving revision 1.7 diff -u -r1.7 DiskFile.java
>�--- src/share/org/apache/struts/upload/DiskFile.java 14 Mar 2004
>�06:23:48 -0000 1.7
>�+++ src/share/org/apache/struts/upload/DiskFile.java 25 Aug 2004
>�01:51:53 -0000 @@ -74,9 +74,15 @@
>
>�byte[] bytes = new byte[getFileSize()];
>
>�- � � � �FileInputStream fis = new FileInputStream(filePath); -
>� � fis.read(bytes); - � � � �fis.close(); + � � � �FileInputStream
>�fis = null; + + � � � �try { + � � � � � �fis = new
>�FileInputStream(filePath); + � � � � � �fis.read(bytes); + � � � �}
>�finally { + � � � � � �if (fis != null) +
>�fis.close(); + � � � �} return bytes; }
>
>�@@ -92,27 +98,33 @@
>�public byte[] getFileData(int bufferSize) throws
>�FileNotFoundException, IOException {
>
>�ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); -
>� � � FileInputStream fis = new FileInputStream(filePath); - -
>� int readLength �= 0; - � � � �int totalLength = 0; - � � � �int
>�offset � � �= 0; + � � � �FileInputStream fis = null;
>
>�- � � � �byte[] bytes = new byte[bufferSize];
>�+ � � � �try {
>�+ � � � � � �fis = new FileInputStream(filePath);
>
>�- � � � �while ((readLength = fis.read(bytes, offset, bufferSize)) !
>�= -1) { + � � � � � �int readLength �= 0; + � � � � � �int
>�totalLength = 0; + � � � � � �int offset � � �= 0;
>
>�- � � � � � �byteStream.write(bytes, offset, bufferSize); -
>� � totalLength += readLength; - � � � � � �offset += readLength; -
>� � � �} - - � � � �bytes = byteStream.toByteArray(); - -
>�fis.close(); - � � � �byteStream.close(); - - � � � �return bytes;
>�+ � � � � � �byte[] bytes = new byte[bufferSize]; +
>�+ � � � � � �while ((readLength = fis.read(bytes, offset,
>�bufferSize)) != -1 ) { +
>�+ � � � � � � � �byteStream.write(bytes, offset, bufferSize); +
>� � � � � � totalLength += readLength; + � � � � � � � �offset +=
>�readLength; + � � � � � �} + + � � � � � �bytes =
>�byteStream.toByteArray(); + + � � � � � �byteStream.close(); + +
>� � � � �return bytes; + � � � �} finally { + � � � � � �if (fis !=
>�null) + � � � � � � � �fis.close(); + � � � �} }
>
>
>�Index: src/share/org/apache/struts/upload/MultipartIterator.java
>�===================================================================
>�RCS file:
>�/home/cvspublic/jakarta-
>�struts/src/share/org/apache/struts/upload/MultipartI terator.java,v
>�retrieving revision 1.27 diff -u -r1.27 MultipartIterator.java
>�--- src/share/org/apache/struts/upload/MultipartIterator.java 14
>�Mar 2004 06:23:48 -0000 1.27
>�+++ src/share/org/apache/struts/upload/MultipartIterator.java 25
>�Aug 2004 01:53:11 -0000 @@ -402,15 +402,20 @@
>�protected File createLocalFile() throws IOException {
>�File tempFile = File.createTempFile(FILE_PREFIX, null, new
>�File(this.tempDir));
>�- � � � �BufferedOutputStream fos = new BufferedOutputStream(new
>�FileOutputStream(tempFile), this.diskBufferSize); - � � � �int read
>�= 0; - � � � �byte buffer[] = new byte[this.diskBufferSize];
>�- � � � �while ((read = this.inputStream.read(buffer, 0,
>�this.diskBufferSize)) >�0) - � � � �{ -
>�fos.write(buffer, 0, read); + � � � �BufferedOutputStream fos =
>�null; + + � � � �try {
>�+ � � � � � �fos = new BufferedOutputStream(new
>�FileOutputStream(tempFile), this.diskBufferSize); + � � � � � �int
>�read = 0;
>�+ � � � � � �byte buffer[] = new byte[this.diskBufferSize]; +
>� � � while ((read = this.inputStream.read(buffer, 0,
>�this.diskBufferSize)) >�0) + � � � � � �{ +
>�fos.write(buffer, 0, read); + � � � � � �} + � � � � � �return
>�tempFile; + � � � �} finally { + � � � � � �if (fos != null) +
>� � � � � �fos.close(); } - � � � �fos.flush(); -
>�fos.close(); - � � � �return tempFile; } }
>�Index: src/share/org/apache/struts/util/ModuleUtils.java
>�===================================================================
>�RCS file:
>�/home/cvspublic/jakarta-
>�struts/src/share/org/apache/struts/util/ModuleUtils. java,v
>�retrieving revision 1.9 diff -u -r1.9 ModuleUtils.java
>�--- src/share/org/apache/struts/util/ModuleUtils.java 22 Jul 2004
>�13:29:44 -0000 1.9
>�+++ src/share/org/apache/struts/util/ModuleUtils.java 3 Aug 2004
>�00:48:15 -0000 @@ -243,20 +243,20 @@
>
>�if (config != null) {
>�request.setAttribute(Globals.MODULE_KEY, config); +
>�MessageResourcesConfig[] mrConfig =
>�config.findMessageResourcesConfigs(); + � � � � � �for(int i = 0; i
>�<�mrConfig.length; i++) { + � � � � � � �String key =
>�mrConfig[i].getKey(); + � � � � � � �MessageResources resources =
>�+ � � � � � � � �(MessageResources) context.getAttribute(key +
>�prefix); + � � � � � � �if (resources != null) {
>�+ � � � � � � � � �request.setAttribute(key, resources); +
>� � �} else { + � � � � � � � � �request.removeAttribute(key); +
>� � � � � } + � � � � � �} } else {
>�request.removeAttribute(Globals.MODULE_KEY); }
>
>�- � � � �MessageResourcesConfig[] mrConfig =
>�config.findMessageResourcesConfigs();
>�- � � � �for(int i = 0; i <�mrConfig.length; i++) {
>�- � � � � �String key = mrConfig[i].getKey();
>�- � � � � �MessageResources resources =
>�- � � � � � �(MessageResources) context.getAttribute(key + prefix);
>�- � � � � �if (resources != null) { -
>�request.setAttribute(key, resources); - � � � � �} else { -
>� � � request.removeAttribute(key); - � � � � �} - � � � �} } }
>
>
>�--------------------------------------------------------------------
>�- To unsubscribe, e-mail: [EMAIL PROTECTED] For
>�additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]