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]