Andrea Cosentino created CAMEL-24488:
----------------------------------------

             Summary: camel-ibm-watson-speech-to-text: 
WatsonSpeechToTextProducer leaks the audio FileInputStream
                 Key: CAMEL-24488
                 URL: https://issues.apache.org/jira/browse/CAMEL-24488
             Project: Camel
          Issue Type: Bug
            Reporter: Andrea Cosentino
            Assignee: Andrea Cosentino
             Fix For: 4.23.0


WatsonSpeechToTextProducer.recognize() opens a FileInputStream for the audio 
input — either from the CamelIbmWatsonSttAudioFile header (a File) or from a 
File message body — but never closes it. There is no try/finally or 
try-with-resources around the stt.recognize(options).execute() call, so on 
every invocation that supplies a File (and on any exception thrown during 
recognition) the file descriptor is leaked.

{code:java}
if (audioFile != null) {
    audioStream = new FileInputStream(audioFile);       // opened, never closed
} else {
    audioStream = exchange.getIn().getBody(InputStream.class);
    if (audioStream == null) {
        File bodyFile = exchange.getIn().getBody(File.class);
        if (bodyFile != null) {
            audioStream = new FileInputStream(bodyFile);  // opened, never 
closed
        }
    }
}
...
SpeechRecognitionResults results = stt.recognize(options).execute().getResult();
{code}

Only the producer-opened stream should be closed. When the audio is supplied as 
an exchange-body InputStream the caller owns it and it must NOT be closed by 
the producer. Fix: track an ownStream flag (set only for the two 
FileInputStream cases) and close the stream via IOHelper.close in a finally 
block around the recognition, only when the producer opened it.

Affected: components/camel-ibm/camel-ibm-watson-speech-to-text 
(org.apache.camel.component.ibm.watson.stt.WatsonSpeechToTextProducer).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to