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, fschumac...@apache.org 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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to