Felix, On 1/24/15 2:33 PM, Felix Schumacher wrote: > Am 24.01.2015 um 17:13 schrieb Christopher Schultz: >> Felix, >> >> On 1/24/15 9:42 AM, [email protected] wrote: >>> Author: fschumacher >>> Date: Sat Jan 24 14:42:27 2015 >>> New Revision: 1654524 >>> >>> URL: http://svn.apache.org/r1654524 >>> Log: >>> Close input and output streams in expandCGIScript to >>> avoid resource leaks. Issue reported by Coverity Scan. >>> >>> Modified: >>> tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java >>> >>> Modified: tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java >>> URL: >>> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java?rev=1654524&r1=1654523&r2=1654524&view=diff >>> >>> ============================================================================== >>> >>> --- tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java >>> (original) >>> +++ tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java >>> Sat Jan 24 14:42:27 2015 >>> @@ -1133,6 +1133,10 @@ public final class CGIServlet extends Ht >>> File f = new File(destPath.toString()); >>> if (f.exists()) { >>> + try { >>> + is.close(); >>> + } catch (IOException ignore) { >>> + } >> Should this be logged? It should very rarely happen, but it would be >> good to know if there was a problem (which might represent a resource >> leak). > I looked for other examples in the source code before and the first few > examples I found where ignoring the exception while closing, too. So I > thought it would be ok, do ignore this exception. > > If we don't want this exception ignored, at what level should the > information be logged? I would go for debug or info.
I think I'm in a minority when it comes to wanting to log these
exceptions. I think it might even be appropriate to log them at the WARN
level. If they happen -- which should be very rare -- it could indicate
a serious problem with the system or the JVM.
>>
>>> // Don't need to expand if it already exists
>>> return;
>>> }
>>> @@ -1162,10 +1166,16 @@ public final class CGIServlet extends Ht
>>> }
>>> FileOutputStream fos = new FileOutputStream(f);
>>> - // copy data
>>> - IOTools.flow(is, fos);
>>> - is.close();
>>> - fos.close();
>>> + try {
>>> + // copy data
>>> + IOTools.flow(is, fos);
>>> + } finally {
>>> + try {
>>> + is.close();
>>> + } catch (IOException ignore) {
>>> + }
>> Same here.
>>
>>> + fos.close();
>> Why not just call fos.close() to close everything all at once?
> Do you mean is.close() and fos.close() inside the same try block? I
> separated them, so that a failed is.close() will not interfere with the
> close call on fos. I didn't put fos.close in a try catch block, since it
> was not in one before the fix.
Oh, I misread the patch. There is no question here about that: your
change is good. I do have the same concern about logging the
exception(s), though.
Thanks,
-chris
signature.asc
Description: OpenPGP digital signature
