[
https://issues.apache.org/jira/browse/IO-854?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Gary D. Gregory updated IO-854:
-------------------------------
External issue URL: https://github.com/apache/commons-io/pull/609
> ThresholdingOutputStream never calls thresholdReached() when threshold < 0
> --------------------------------------------------------------------------
>
> Key: IO-854
> URL: https://issues.apache.org/jira/browse/IO-854
> Project: Commons IO
> Issue Type: Bug
> Components: Streams/Writers
> Affects Versions: 2.16.0
> Reporter: Bill Orpet
> Priority: Major
>
> After 2.16.0, if {{ThresholdingOutputStream}} is created with a {{threshold}}
> less than 0, such as -1, it will never call {{{}thresholdReached(){}}}.
> Specifically, in {{{}checkThreshold(final int count){}}},
> {{thresholdExceeded}} is now already true, so the condition is never met.
>
> {code:java}
> if (!thresholdExceeded && written + count > threshold) {
> thresholdExceeded = true;
> thresholdReached();
> }{code}
>
> This leads to a problem in {{{}DeferredFileOutputStream{}}}, because it
> extends {{{}ThresholdingOutputStream{}}}. {{DeferredFileOutputStream}} relies
> on {{thresholdReached()}} to know when to create a temp file. Now the temp
> file is never created. This, in turn, leads to a problem in
> commons-fileupload {{{}DiskFileItem{}}}. This, in turn, leads to problem in
> Struts2 {{{}JakartaMultiPartRequest{}}}.
> It seems an oversight that thresholdReached() is never called. The
> documentation for that method says:
> {quote}Indicates that the configured threshold has been reached, and that
> {*}a subclass should take whatever action necessary on this event{*}. This
> may include changing the underlying output stream.
> {quote}
> There is now no longer any notification to subclasses, which can cause a
> cascade of problems.
> This seems to be the commit that introduced the change:
> [https://github.com/apache/commons-io/commit/4f144cf02cfb5f72184bfef40efd8f99a4278ba8,]
> seems to be related to IO-405.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)