Modified: 
websites/production/commons/content/proper/commons-fileupload/commons-fileupload2-core/apidocs/src-html/org/apache/commons/fileupload2/core/MultipartInput.FileUploadBoundaryException.html
==============================================================================
--- 
websites/production/commons/content/proper/commons-fileupload/commons-fileupload2-core/apidocs/src-html/org/apache/commons/fileupload2/core/MultipartInput.FileUploadBoundaryException.html
 (original)
+++ 
websites/production/commons/content/proper/commons-fileupload/commons-fileupload2-core/apidocs/src-html/org/apache/commons/fileupload2/core/MultipartInput.FileUploadBoundaryException.html
 Mon Jun 16 14:44:13 2025
@@ -123,875 +123,916 @@
 <span class="source-line-no">110</span><span id="line-110">         */</span>
 <span class="source-line-no">111</span><span id="line-111">        private 
ProgressNotifier progressNotifier;</span>
 <span class="source-line-no">112</span><span id="line-112"></span>
-<span class="source-line-no">113</span><span id="line-113">        /**</span>
-<span class="source-line-no">114</span><span id="line-114">         * 
Constructs a new instance.</span>
-<span class="source-line-no">115</span><span id="line-115">         */</span>
-<span class="source-line-no">116</span><span id="line-116">        public 
Builder() {</span>
-<span class="source-line-no">117</span><span id="line-117">            
setBufferSizeDefault(DEFAULT_BUFSIZE);</span>
-<span class="source-line-no">118</span><span id="line-118">        }</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120">        /**</span>
-<span class="source-line-no">121</span><span id="line-121">         * 
Constructs a new instance.</span>
-<span class="source-line-no">122</span><span id="line-122">         * 
&lt;p&gt;</span>
-<span class="source-line-no">123</span><span id="line-123">         * This 
builder uses the InputStream, buffer size, boundary and progress notifier 
aspects.</span>
-<span class="source-line-no">124</span><span id="line-124">         * 
&lt;/p&gt;</span>
-<span class="source-line-no">125</span><span id="line-125">         * 
&lt;p&gt;</span>
-<span class="source-line-no">126</span><span id="line-126">         * You must 
provide an origin that can be converted to a Reader by this builder, otherwise, 
this call will throw an</span>
-<span class="source-line-no">127</span><span id="line-127">         * {@link 
UnsupportedOperationException}.</span>
+<span class="source-line-no">113</span><span id="line-113">        /** The  
per part size limit for headers.</span>
+<span class="source-line-no">114</span><span id="line-114">         */</span>
+<span class="source-line-no">115</span><span id="line-115">        private int 
partHeaderSizeMax = DEFAULT_PART_HEADER_SIZE_MAX;</span>
+<span class="source-line-no">116</span><span id="line-116"></span>
+<span class="source-line-no">117</span><span id="line-117">        /**</span>
+<span class="source-line-no">118</span><span id="line-118">         * 
Constructs a new instance.</span>
+<span class="source-line-no">119</span><span id="line-119">         */</span>
+<span class="source-line-no">120</span><span id="line-120">        public 
Builder() {</span>
+<span class="source-line-no">121</span><span id="line-121">            
setBufferSizeDefault(DEFAULT_BUFSIZE);</span>
+<span class="source-line-no">122</span><span id="line-122">        }</span>
+<span class="source-line-no">123</span><span id="line-123"></span>
+<span class="source-line-no">124</span><span id="line-124">        /**</span>
+<span class="source-line-no">125</span><span id="line-125">         * 
Constructs a new instance.</span>
+<span class="source-line-no">126</span><span id="line-126">         * 
&lt;p&gt;</span>
+<span class="source-line-no">127</span><span id="line-127">         * This 
builder uses the InputStream, buffer size, boundary and progress notifier 
aspects.</span>
 <span class="source-line-no">128</span><span id="line-128">         * 
&lt;/p&gt;</span>
-<span class="source-line-no">129</span><span id="line-129">         *</span>
-<span class="source-line-no">130</span><span id="line-130">         * @return 
a new instance.</span>
-<span class="source-line-no">131</span><span id="line-131">         * @throws 
IOException                   if an I/O error occurs.</span>
-<span class="source-line-no">132</span><span id="line-132">         * @throws 
UnsupportedOperationException if the origin cannot provide a Path.</span>
-<span class="source-line-no">133</span><span id="line-133">         * @see 
AbstractOrigin#getReader(Charset)</span>
-<span class="source-line-no">134</span><span id="line-134">         */</span>
-<span class="source-line-no">135</span><span id="line-135">        
@Override</span>
-<span class="source-line-no">136</span><span id="line-136">        public 
MultipartInput get() throws IOException {</span>
-<span class="source-line-no">137</span><span id="line-137">            return 
new MultipartInput(getInputStream(), boundary, getBufferSize(), 
progressNotifier);</span>
-<span class="source-line-no">138</span><span id="line-138">        }</span>
-<span class="source-line-no">139</span><span id="line-139"></span>
-<span class="source-line-no">140</span><span id="line-140">        /**</span>
-<span class="source-line-no">141</span><span id="line-141">         * Sets the 
boundary.</span>
-<span class="source-line-no">142</span><span id="line-142">         *</span>
-<span class="source-line-no">143</span><span id="line-143">         * @param 
boundary the boundary.</span>
-<span class="source-line-no">144</span><span id="line-144">         * @return 
{@code this} instance.</span>
-<span class="source-line-no">145</span><span id="line-145">         */</span>
-<span class="source-line-no">146</span><span id="line-146">        public 
Builder setBoundary(final byte[] boundary) {</span>
-<span class="source-line-no">147</span><span id="line-147">            
this.boundary = boundary;</span>
-<span class="source-line-no">148</span><span id="line-148">            return 
this;</span>
-<span class="source-line-no">149</span><span id="line-149">        }</span>
-<span class="source-line-no">150</span><span id="line-150"></span>
-<span class="source-line-no">151</span><span id="line-151">        /**</span>
-<span class="source-line-no">152</span><span id="line-152">         * Sets the 
progress notifier.</span>
-<span class="source-line-no">153</span><span id="line-153">         *</span>
-<span class="source-line-no">154</span><span id="line-154">         * @param 
progressNotifier progress notifier.</span>
-<span class="source-line-no">155</span><span id="line-155">         * @return 
{@code this} instance.</span>
-<span class="source-line-no">156</span><span id="line-156">         */</span>
-<span class="source-line-no">157</span><span id="line-157">        public 
Builder setProgressNotifier(final ProgressNotifier progressNotifier) {</span>
-<span class="source-line-no">158</span><span id="line-158">            
this.progressNotifier = progressNotifier;</span>
-<span class="source-line-no">159</span><span id="line-159">            return 
this;</span>
-<span class="source-line-no">160</span><span id="line-160">        }</span>
-<span class="source-line-no">161</span><span id="line-161"></span>
-<span class="source-line-no">162</span><span id="line-162">    }</span>
-<span class="source-line-no">163</span><span id="line-163"></span>
-<span class="source-line-no">164</span><span id="line-164">    /**</span>
-<span class="source-line-no">165</span><span id="line-165">     * Signals an 
attempt to set an invalid boundary token.</span>
-<span class="source-line-no">166</span><span id="line-166">     */</span>
-<span class="source-line-no">167</span><span id="line-167">    public static 
class FileUploadBoundaryException extends FileUploadException {</span>
-<span class="source-line-no">168</span><span id="line-168"></span>
-<span class="source-line-no">169</span><span id="line-169">        /**</span>
-<span class="source-line-no">170</span><span id="line-170">         * The UID 
to use when serializing this instance.</span>
-<span class="source-line-no">171</span><span id="line-171">         */</span>
-<span class="source-line-no">172</span><span id="line-172">        private 
static final long serialVersionUID = 2;</span>
-<span class="source-line-no">173</span><span id="line-173"></span>
-<span class="source-line-no">174</span><span id="line-174">        /**</span>
-<span class="source-line-no">175</span><span id="line-175">         * 
Constructs an instance with the specified detail message.</span>
-<span class="source-line-no">176</span><span id="line-176">         *</span>
-<span class="source-line-no">177</span><span id="line-177">         * @param 
message The detail message (which is saved for later retrieval by the {@link 
#getMessage()} method)</span>
-<span class="source-line-no">178</span><span id="line-178">         */</span>
-<span class="source-line-no">179</span><span id="line-179">        public 
FileUploadBoundaryException(final String message) {</span>
-<span class="source-line-no">180</span><span id="line-180">            
super(message);</span>
-<span class="source-line-no">181</span><span id="line-181">        }</span>
-<span class="source-line-no">182</span><span id="line-182"></span>
-<span class="source-line-no">183</span><span id="line-183">    }</span>
-<span class="source-line-no">184</span><span id="line-184"></span>
-<span class="source-line-no">185</span><span id="line-185">    /**</span>
-<span class="source-line-no">186</span><span id="line-186">     * An {@link 
InputStream} for reading an items contents.</span>
-<span class="source-line-no">187</span><span id="line-187">     */</span>
-<span class="source-line-no">188</span><span id="line-188">    public class 
ItemInputStream extends InputStream {</span>
-<span class="source-line-no">189</span><span id="line-189"></span>
-<span class="source-line-no">190</span><span id="line-190">        /**</span>
-<span class="source-line-no">191</span><span id="line-191">         * Offset 
when converting negative bytes to integers.</span>
-<span class="source-line-no">192</span><span id="line-192">         */</span>
-<span class="source-line-no">193</span><span id="line-193">        private 
static final int BYTE_POSITIVE_OFFSET = 256;</span>
-<span class="source-line-no">194</span><span id="line-194"></span>
-<span class="source-line-no">195</span><span id="line-195">        /**</span>
-<span class="source-line-no">196</span><span id="line-196">         * The 
number of bytes, which have been read so far.</span>
-<span class="source-line-no">197</span><span id="line-197">         */</span>
-<span class="source-line-no">198</span><span id="line-198">        private 
long total;</span>
-<span class="source-line-no">199</span><span id="line-199"></span>
-<span class="source-line-no">200</span><span id="line-200">        /**</span>
-<span class="source-line-no">201</span><span id="line-201">         * The 
number of bytes, which must be hold, because they might be a part of the 
boundary.</span>
-<span class="source-line-no">202</span><span id="line-202">         */</span>
-<span class="source-line-no">203</span><span id="line-203">        private int 
pad;</span>
+<span class="source-line-no">129</span><span id="line-129">         * 
&lt;p&gt;</span>
+<span class="source-line-no">130</span><span id="line-130">         * You must 
provide an origin that can be converted to a Reader by this builder, otherwise, 
this call will throw an</span>
+<span class="source-line-no">131</span><span id="line-131">         * {@link 
UnsupportedOperationException}.</span>
+<span class="source-line-no">132</span><span id="line-132">         * 
&lt;/p&gt;</span>
+<span class="source-line-no">133</span><span id="line-133">         *</span>
+<span class="source-line-no">134</span><span id="line-134">         * @return 
a new instance.</span>
+<span class="source-line-no">135</span><span id="line-135">         * @throws 
IOException                   if an I/O error occurs.</span>
+<span class="source-line-no">136</span><span id="line-136">         * @throws 
UnsupportedOperationException if the origin cannot provide a Path.</span>
+<span class="source-line-no">137</span><span id="line-137">         * @see 
AbstractOrigin#getReader(Charset)</span>
+<span class="source-line-no">138</span><span id="line-138">         */</span>
+<span class="source-line-no">139</span><span id="line-139">        
@Override</span>
+<span class="source-line-no">140</span><span id="line-140">        public 
MultipartInput get() throws IOException {</span>
+<span class="source-line-no">141</span><span id="line-141">            return 
new MultipartInput(getInputStream(), boundary, getBufferSize(), 
getPartHeaderSizeMax(), progressNotifier);</span>
+<span class="source-line-no">142</span><span id="line-142">        }</span>
+<span class="source-line-no">143</span><span id="line-143"></span>
+<span class="source-line-no">144</span><span id="line-144">        /** Returns 
the per part size limit for headers.</span>
+<span class="source-line-no">145</span><span id="line-145">         * @return 
The maximum size of the headers in bytes.</span>
+<span class="source-line-no">146</span><span id="line-146">         * @since 
2.0.0-M4</span>
+<span class="source-line-no">147</span><span id="line-147">         */</span>
+<span class="source-line-no">148</span><span id="line-148">        public int 
getPartHeaderSizeMax() {</span>
+<span class="source-line-no">149</span><span id="line-149">            return 
partHeaderSizeMax;</span>
+<span class="source-line-no">150</span><span id="line-150">        }</span>
+<span class="source-line-no">151</span><span id="line-151"></span>
+<span class="source-line-no">152</span><span id="line-152">        /**</span>
+<span class="source-line-no">153</span><span id="line-153">         * Sets the 
boundary.</span>
+<span class="source-line-no">154</span><span id="line-154">         *</span>
+<span class="source-line-no">155</span><span id="line-155">         * @param 
boundary the boundary.</span>
+<span class="source-line-no">156</span><span id="line-156">         * @return 
{@code this} instance.</span>
+<span class="source-line-no">157</span><span id="line-157">         */</span>
+<span class="source-line-no">158</span><span id="line-158">        public 
Builder setBoundary(final byte[] boundary) {</span>
+<span class="source-line-no">159</span><span id="line-159">            
this.boundary = boundary;</span>
+<span class="source-line-no">160</span><span id="line-160">            return 
this;</span>
+<span class="source-line-no">161</span><span id="line-161">        }</span>
+<span class="source-line-no">162</span><span id="line-162"></span>
+<span class="source-line-no">163</span><span id="line-163">       /** Sets the 
per part size limit for headers.</span>
+<span class="source-line-no">164</span><span id="line-164">     * @param 
partHeaderSizeMax The maximum size of the headers in bytes.</span>
+<span class="source-line-no">165</span><span id="line-165">     * @return This 
builder.</span>
+<span class="source-line-no">166</span><span id="line-166">     * @since 
2.0.0-M4</span>
+<span class="source-line-no">167</span><span id="line-167">     */</span>
+<span class="source-line-no">168</span><span id="line-168">    public Builder 
setPartHeaderSizeMax(final int partHeaderSizeMax) {</span>
+<span class="source-line-no">169</span><span id="line-169">        
this.partHeaderSizeMax = partHeaderSizeMax;</span>
+<span class="source-line-no">170</span><span id="line-170">        return 
this;</span>
+<span class="source-line-no">171</span><span id="line-171">    }</span>
+<span class="source-line-no">172</span><span id="line-172"></span>
+<span class="source-line-no">173</span><span id="line-173">        /**</span>
+<span class="source-line-no">174</span><span id="line-174">             * Sets 
the progress notifier.</span>
+<span class="source-line-no">175</span><span id="line-175">             
*</span>
+<span class="source-line-no">176</span><span id="line-176">             * 
@param progressNotifier progress notifier.</span>
+<span class="source-line-no">177</span><span id="line-177">             * 
@return {@code this} instance.</span>
+<span class="source-line-no">178</span><span id="line-178">             
*/</span>
+<span class="source-line-no">179</span><span id="line-179">            public 
Builder setProgressNotifier(final ProgressNotifier progressNotifier) {</span>
+<span class="source-line-no">180</span><span id="line-180">                
this.progressNotifier = progressNotifier;</span>
+<span class="source-line-no">181</span><span id="line-181">                
return this;</span>
+<span class="source-line-no">182</span><span id="line-182">            }</span>
+<span class="source-line-no">183</span><span id="line-183"></span>
+<span class="source-line-no">184</span><span id="line-184">    }</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186">    /**</span>
+<span class="source-line-no">187</span><span id="line-187">     * Signals an 
attempt to set an invalid boundary token.</span>
+<span class="source-line-no">188</span><span id="line-188">     */</span>
+<span class="source-line-no">189</span><span id="line-189">    public static 
class FileUploadBoundaryException extends FileUploadException {</span>
+<span class="source-line-no">190</span><span id="line-190"></span>
+<span class="source-line-no">191</span><span id="line-191">        /**</span>
+<span class="source-line-no">192</span><span id="line-192">         * The UID 
to use when serializing this instance.</span>
+<span class="source-line-no">193</span><span id="line-193">         */</span>
+<span class="source-line-no">194</span><span id="line-194">        private 
static final long serialVersionUID = 2;</span>
+<span class="source-line-no">195</span><span id="line-195"></span>
+<span class="source-line-no">196</span><span id="line-196">        /**</span>
+<span class="source-line-no">197</span><span id="line-197">         * 
Constructs an instance with the specified detail message.</span>
+<span class="source-line-no">198</span><span id="line-198">         *</span>
+<span class="source-line-no">199</span><span id="line-199">         * @param 
message The detail message (which is saved for later retrieval by the {@link 
#getMessage()} method)</span>
+<span class="source-line-no">200</span><span id="line-200">         */</span>
+<span class="source-line-no">201</span><span id="line-201">        public 
FileUploadBoundaryException(final String message) {</span>
+<span class="source-line-no">202</span><span id="line-202">            
super(message);</span>
+<span class="source-line-no">203</span><span id="line-203">        }</span>
 <span class="source-line-no">204</span><span id="line-204"></span>
-<span class="source-line-no">205</span><span id="line-205">        /**</span>
-<span class="source-line-no">206</span><span id="line-206">         * The 
current offset in the buffer.</span>
-<span class="source-line-no">207</span><span id="line-207">         */</span>
-<span class="source-line-no">208</span><span id="line-208">        private int 
pos;</span>
-<span class="source-line-no">209</span><span id="line-209"></span>
-<span class="source-line-no">210</span><span id="line-210">        /**</span>
-<span class="source-line-no">211</span><span id="line-211">         * Whether 
the stream is already closed.</span>
-<span class="source-line-no">212</span><span id="line-212">         */</span>
-<span class="source-line-no">213</span><span id="line-213">        private 
boolean closed;</span>
-<span class="source-line-no">214</span><span id="line-214"></span>
-<span class="source-line-no">215</span><span id="line-215">        /**</span>
-<span class="source-line-no">216</span><span id="line-216">         * Creates 
a new instance.</span>
-<span class="source-line-no">217</span><span id="line-217">         */</span>
-<span class="source-line-no">218</span><span id="line-218">        
ItemInputStream() {</span>
-<span class="source-line-no">219</span><span id="line-219">            
findSeparator();</span>
-<span class="source-line-no">220</span><span id="line-220">        }</span>
+<span class="source-line-no">205</span><span id="line-205">    }</span>
+<span class="source-line-no">206</span><span id="line-206"></span>
+<span class="source-line-no">207</span><span id="line-207">    /**</span>
+<span class="source-line-no">208</span><span id="line-208">     * An {@link 
InputStream} for reading an items contents.</span>
+<span class="source-line-no">209</span><span id="line-209">     */</span>
+<span class="source-line-no">210</span><span id="line-210">    public class 
ItemInputStream extends InputStream {</span>
+<span class="source-line-no">211</span><span id="line-211"></span>
+<span class="source-line-no">212</span><span id="line-212">        /**</span>
+<span class="source-line-no">213</span><span id="line-213">         * Offset 
when converting negative bytes to integers.</span>
+<span class="source-line-no">214</span><span id="line-214">         */</span>
+<span class="source-line-no">215</span><span id="line-215">        private 
static final int BYTE_POSITIVE_OFFSET = 256;</span>
+<span class="source-line-no">216</span><span id="line-216"></span>
+<span class="source-line-no">217</span><span id="line-217">        /**</span>
+<span class="source-line-no">218</span><span id="line-218">         * The 
number of bytes, which have been read so far.</span>
+<span class="source-line-no">219</span><span id="line-219">         */</span>
+<span class="source-line-no">220</span><span id="line-220">        private 
long total;</span>
 <span class="source-line-no">221</span><span id="line-221"></span>
 <span class="source-line-no">222</span><span id="line-222">        /**</span>
-<span class="source-line-no">223</span><span id="line-223">         * Returns 
the number of bytes, which are currently available, without blocking.</span>
-<span class="source-line-no">224</span><span id="line-224">         *</span>
-<span class="source-line-no">225</span><span id="line-225">         * @throws 
IOException An I/O error occurs.</span>
-<span class="source-line-no">226</span><span id="line-226">         * @return 
Number of bytes in the buffer.</span>
-<span class="source-line-no">227</span><span id="line-227">         */</span>
-<span class="source-line-no">228</span><span id="line-228">        
@Override</span>
-<span class="source-line-no">229</span><span id="line-229">        public int 
available() throws IOException {</span>
-<span class="source-line-no">230</span><span id="line-230">            if (pos 
== -1) {</span>
-<span class="source-line-no">231</span><span id="line-231">                
return tail - head - pad;</span>
-<span class="source-line-no">232</span><span id="line-232">            }</span>
-<span class="source-line-no">233</span><span id="line-233">            return 
pos - head;</span>
-<span class="source-line-no">234</span><span id="line-234">        }</span>
-<span class="source-line-no">235</span><span id="line-235"></span>
-<span class="source-line-no">236</span><span id="line-236">        private 
void checkOpen() throws ItemSkippedException {</span>
-<span class="source-line-no">237</span><span id="line-237">            if 
(closed) {</span>
-<span class="source-line-no">238</span><span id="line-238">                
throw new FileItemInput.ItemSkippedException("checkOpen()");</span>
-<span class="source-line-no">239</span><span id="line-239">            }</span>
-<span class="source-line-no">240</span><span id="line-240">        }</span>
-<span class="source-line-no">241</span><span id="line-241"></span>
-<span class="source-line-no">242</span><span id="line-242">        /**</span>
-<span class="source-line-no">243</span><span id="line-243">         * Closes 
the input stream.</span>
-<span class="source-line-no">244</span><span id="line-244">         *</span>
-<span class="source-line-no">245</span><span id="line-245">         * @throws 
IOException An I/O error occurred.</span>
-<span class="source-line-no">246</span><span id="line-246">         */</span>
-<span class="source-line-no">247</span><span id="line-247">        
@Override</span>
-<span class="source-line-no">248</span><span id="line-248">        public void 
close() throws IOException {</span>
-<span class="source-line-no">249</span><span id="line-249">            
close(false);</span>
-<span class="source-line-no">250</span><span id="line-250">        }</span>
-<span class="source-line-no">251</span><span id="line-251"></span>
-<span class="source-line-no">252</span><span id="line-252">        /**</span>
-<span class="source-line-no">253</span><span id="line-253">         * Closes 
the input stream.</span>
-<span class="source-line-no">254</span><span id="line-254">         *</span>
-<span class="source-line-no">255</span><span id="line-255">         * @param 
closeUnderlying Whether to close the underlying stream (hard close)</span>
-<span class="source-line-no">256</span><span id="line-256">         * @throws 
IOException An I/O error occurred.</span>
-<span class="source-line-no">257</span><span id="line-257">         */</span>
-<span class="source-line-no">258</span><span id="line-258">        public void 
close(final boolean closeUnderlying) throws IOException {</span>
+<span class="source-line-no">223</span><span id="line-223">         * The 
number of bytes, which must be hold, because they might be a part of the 
boundary.</span>
+<span class="source-line-no">224</span><span id="line-224">         */</span>
+<span class="source-line-no">225</span><span id="line-225">        private int 
pad;</span>
+<span class="source-line-no">226</span><span id="line-226"></span>
+<span class="source-line-no">227</span><span id="line-227">        /**</span>
+<span class="source-line-no">228</span><span id="line-228">         * The 
current offset in the buffer.</span>
+<span class="source-line-no">229</span><span id="line-229">         */</span>
+<span class="source-line-no">230</span><span id="line-230">        private int 
pos;</span>
+<span class="source-line-no">231</span><span id="line-231"></span>
+<span class="source-line-no">232</span><span id="line-232">        /**</span>
+<span class="source-line-no">233</span><span id="line-233">         * Whether 
the stream is already closed.</span>
+<span class="source-line-no">234</span><span id="line-234">         */</span>
+<span class="source-line-no">235</span><span id="line-235">        private 
boolean closed;</span>
+<span class="source-line-no">236</span><span id="line-236"></span>
+<span class="source-line-no">237</span><span id="line-237">        /**</span>
+<span class="source-line-no">238</span><span id="line-238">         * Creates 
a new instance.</span>
+<span class="source-line-no">239</span><span id="line-239">         */</span>
+<span class="source-line-no">240</span><span id="line-240">        
ItemInputStream() {</span>
+<span class="source-line-no">241</span><span id="line-241">            
findSeparator();</span>
+<span class="source-line-no">242</span><span id="line-242">        }</span>
+<span class="source-line-no">243</span><span id="line-243"></span>
+<span class="source-line-no">244</span><span id="line-244">        /**</span>
+<span class="source-line-no">245</span><span id="line-245">         * Returns 
the number of bytes, which are currently available, without blocking.</span>
+<span class="source-line-no">246</span><span id="line-246">         *</span>
+<span class="source-line-no">247</span><span id="line-247">         * @throws 
IOException An I/O error occurs.</span>
+<span class="source-line-no">248</span><span id="line-248">         * @return 
Number of bytes in the buffer.</span>
+<span class="source-line-no">249</span><span id="line-249">         */</span>
+<span class="source-line-no">250</span><span id="line-250">        
@Override</span>
+<span class="source-line-no">251</span><span id="line-251">        public int 
available() throws IOException {</span>
+<span class="source-line-no">252</span><span id="line-252">            if (pos 
== -1) {</span>
+<span class="source-line-no">253</span><span id="line-253">                
return tail - head - pad;</span>
+<span class="source-line-no">254</span><span id="line-254">            }</span>
+<span class="source-line-no">255</span><span id="line-255">            return 
pos - head;</span>
+<span class="source-line-no">256</span><span id="line-256">        }</span>
+<span class="source-line-no">257</span><span id="line-257"></span>
+<span class="source-line-no">258</span><span id="line-258">        private 
void checkOpen() throws ItemSkippedException {</span>
 <span class="source-line-no">259</span><span id="line-259">            if 
(closed) {</span>
-<span class="source-line-no">260</span><span id="line-260">                
return;</span>
+<span class="source-line-no">260</span><span id="line-260">                
throw new FileItemInput.ItemSkippedException("checkOpen()");</span>
 <span class="source-line-no">261</span><span id="line-261">            }</span>
-<span class="source-line-no">262</span><span id="line-262">            if 
(closeUnderlying) {</span>
-<span class="source-line-no">263</span><span id="line-263">                
closed = true;</span>
-<span class="source-line-no">264</span><span id="line-264">                
input.close();</span>
-<span class="source-line-no">265</span><span id="line-265">            } else 
{</span>
-<span class="source-line-no">266</span><span id="line-266">                for 
(;;) {</span>
-<span class="source-line-no">267</span><span id="line-267">                    
var avail = available();</span>
-<span class="source-line-no">268</span><span id="line-268">                    
if (avail == 0) {</span>
-<span class="source-line-no">269</span><span id="line-269">                    
    avail = makeAvailable();</span>
-<span class="source-line-no">270</span><span id="line-270">                    
    if (avail == 0) {</span>
-<span class="source-line-no">271</span><span id="line-271">                    
        break;</span>
-<span class="source-line-no">272</span><span id="line-272">                    
    }</span>
-<span class="source-line-no">273</span><span id="line-273">                    
}</span>
-<span class="source-line-no">274</span><span id="line-274">                    
if (skip(avail) != avail) {</span>
-<span class="source-line-no">275</span><span id="line-275">                    
    // TODO What to do?</span>
-<span class="source-line-no">276</span><span id="line-276">                    
}</span>
-<span class="source-line-no">277</span><span id="line-277">                
}</span>
-<span class="source-line-no">278</span><span id="line-278">            }</span>
-<span class="source-line-no">279</span><span id="line-279">            closed 
= true;</span>
-<span class="source-line-no">280</span><span id="line-280">        }</span>
-<span class="source-line-no">281</span><span id="line-281"></span>
-<span class="source-line-no">282</span><span id="line-282">        /**</span>
-<span class="source-line-no">283</span><span id="line-283">         * Called 
for finding the separator.</span>
-<span class="source-line-no">284</span><span id="line-284">         */</span>
-<span class="source-line-no">285</span><span id="line-285">        private 
void findSeparator() {</span>
-<span class="source-line-no">286</span><span id="line-286">            pos = 
MultipartInput.this.findSeparator();</span>
-<span class="source-line-no">287</span><span id="line-287">            if (pos 
== -1) {</span>
-<span class="source-line-no">288</span><span id="line-288">                if 
(tail - head &gt; keepRegion) {</span>
-<span class="source-line-no">289</span><span id="line-289">                    
pad = keepRegion;</span>
-<span class="source-line-no">290</span><span id="line-290">                } 
else {</span>
-<span class="source-line-no">291</span><span id="line-291">                    
pad = tail - head;</span>
-<span class="source-line-no">292</span><span id="line-292">                
}</span>
-<span class="source-line-no">293</span><span id="line-293">            }</span>
-<span class="source-line-no">294</span><span id="line-294">        }</span>
-<span class="source-line-no">295</span><span id="line-295"></span>
-<span class="source-line-no">296</span><span id="line-296">        /**</span>
-<span class="source-line-no">297</span><span id="line-297">         * Gets the 
number of bytes, which have been read by the stream.</span>
-<span class="source-line-no">298</span><span id="line-298">         *</span>
-<span class="source-line-no">299</span><span id="line-299">         * @return 
Number of bytes, which have been read so far.</span>
-<span class="source-line-no">300</span><span id="line-300">         */</span>
-<span class="source-line-no">301</span><span id="line-301">        public long 
getBytesRead() {</span>
-<span class="source-line-no">302</span><span id="line-302">            return 
total;</span>
-<span class="source-line-no">303</span><span id="line-303">        }</span>
-<span class="source-line-no">304</span><span id="line-304"></span>
-<span class="source-line-no">305</span><span id="line-305">        /**</span>
-<span class="source-line-no">306</span><span id="line-306">         * Tests 
whether this instance is closed.</span>
-<span class="source-line-no">307</span><span id="line-307">         *</span>
-<span class="source-line-no">308</span><span id="line-308">         * @return 
whether this instance is closed.</span>
-<span class="source-line-no">309</span><span id="line-309">         */</span>
-<span class="source-line-no">310</span><span id="line-310">        public 
boolean isClosed() {</span>
-<span class="source-line-no">311</span><span id="line-311">            return 
closed;</span>
-<span class="source-line-no">312</span><span id="line-312">        }</span>
-<span class="source-line-no">313</span><span id="line-313"></span>
-<span class="source-line-no">314</span><span id="line-314">        /**</span>
-<span class="source-line-no">315</span><span id="line-315">         * Attempts 
to read more data.</span>
-<span class="source-line-no">316</span><span id="line-316">         *</span>
-<span class="source-line-no">317</span><span id="line-317">         * @return 
Number of available bytes</span>
-<span class="source-line-no">318</span><span id="line-318">         * @throws 
IOException An I/O error occurred.</span>
-<span class="source-line-no">319</span><span id="line-319">         */</span>
-<span class="source-line-no">320</span><span id="line-320">        private int 
makeAvailable() throws IOException {</span>
-<span class="source-line-no">321</span><span id="line-321">            if (pos 
!= -1) {</span>
-<span class="source-line-no">322</span><span id="line-322">                
return 0;</span>
-<span class="source-line-no">323</span><span id="line-323">            }</span>
-<span class="source-line-no">324</span><span id="line-324"></span>
-<span class="source-line-no">325</span><span id="line-325">            // Move 
the data to the beginning of the buffer.</span>
-<span class="source-line-no">326</span><span id="line-326">            total 
+= tail - head - pad;</span>
-<span class="source-line-no">327</span><span id="line-327">            
System.arraycopy(buffer, tail - pad, buffer, 0, pad);</span>
-<span class="source-line-no">328</span><span id="line-328"></span>
-<span class="source-line-no">329</span><span id="line-329">            // 
Refill buffer with new data.</span>
-<span class="source-line-no">330</span><span id="line-330">            head = 
0;</span>
-<span class="source-line-no">331</span><span id="line-331">            tail = 
pad;</span>
-<span class="source-line-no">332</span><span id="line-332"></span>
-<span class="source-line-no">333</span><span id="line-333">            for 
(;;) {</span>
-<span class="source-line-no">334</span><span id="line-334">                
final var bytesRead = input.read(buffer, tail, bufSize - tail);</span>
-<span class="source-line-no">335</span><span id="line-335">                if 
(bytesRead == -1) {</span>
-<span class="source-line-no">336</span><span id="line-336">                    
// The last pad amount is left in the buffer.</span>
-<span class="source-line-no">337</span><span id="line-337">                    
// Boundary can't be in there so signal an error</span>
-<span class="source-line-no">338</span><span id="line-338">                    
// condition.</span>
-<span class="source-line-no">339</span><span id="line-339">                    
final var msg = "Stream ended unexpectedly";</span>
-<span class="source-line-no">340</span><span id="line-340">                    
throw new MalformedStreamException(msg);</span>
-<span class="source-line-no">341</span><span id="line-341">                
}</span>
-<span class="source-line-no">342</span><span id="line-342">                if 
(notifier != null) {</span>
-<span class="source-line-no">343</span><span id="line-343">                    
notifier.noteBytesRead(bytesRead);</span>
-<span class="source-line-no">344</span><span id="line-344">                
}</span>
-<span class="source-line-no">345</span><span id="line-345">                
tail += bytesRead;</span>
+<span class="source-line-no">262</span><span id="line-262">        }</span>
+<span class="source-line-no">263</span><span id="line-263"></span>
+<span class="source-line-no">264</span><span id="line-264">        /**</span>
+<span class="source-line-no">265</span><span id="line-265">         * Closes 
the input stream.</span>
+<span class="source-line-no">266</span><span id="line-266">         *</span>
+<span class="source-line-no">267</span><span id="line-267">         * @throws 
IOException An I/O error occurred.</span>
+<span class="source-line-no">268</span><span id="line-268">         */</span>
+<span class="source-line-no">269</span><span id="line-269">        
@Override</span>
+<span class="source-line-no">270</span><span id="line-270">        public void 
close() throws IOException {</span>
+<span class="source-line-no">271</span><span id="line-271">            
close(false);</span>
+<span class="source-line-no">272</span><span id="line-272">        }</span>
+<span class="source-line-no">273</span><span id="line-273"></span>
+<span class="source-line-no">274</span><span id="line-274">        /**</span>
+<span class="source-line-no">275</span><span id="line-275">         * Closes 
the input stream.</span>
+<span class="source-line-no">276</span><span id="line-276">         *</span>
+<span class="source-line-no">277</span><span id="line-277">         * @param 
closeUnderlying Whether to close the underlying stream (hard close)</span>
+<span class="source-line-no">278</span><span id="line-278">         * @throws 
IOException An I/O error occurred.</span>
+<span class="source-line-no">279</span><span id="line-279">         */</span>
+<span class="source-line-no">280</span><span id="line-280">        public void 
close(final boolean closeUnderlying) throws IOException {</span>
+<span class="source-line-no">281</span><span id="line-281">            if 
(closed) {</span>
+<span class="source-line-no">282</span><span id="line-282">                
return;</span>
+<span class="source-line-no">283</span><span id="line-283">            }</span>
+<span class="source-line-no">284</span><span id="line-284">            if 
(closeUnderlying) {</span>
+<span class="source-line-no">285</span><span id="line-285">                
closed = true;</span>
+<span class="source-line-no">286</span><span id="line-286">                
input.close();</span>
+<span class="source-line-no">287</span><span id="line-287">            } else 
{</span>
+<span class="source-line-no">288</span><span id="line-288">                for 
(;;) {</span>
+<span class="source-line-no">289</span><span id="line-289">                    
var avail = available();</span>
+<span class="source-line-no">290</span><span id="line-290">                    
if (avail == 0) {</span>
+<span class="source-line-no">291</span><span id="line-291">                    
    avail = makeAvailable();</span>
+<span class="source-line-no">292</span><span id="line-292">                    
    if (avail == 0) {</span>
+<span class="source-line-no">293</span><span id="line-293">                    
        break;</span>
+<span class="source-line-no">294</span><span id="line-294">                    
    }</span>
+<span class="source-line-no">295</span><span id="line-295">                    
}</span>
+<span class="source-line-no">296</span><span id="line-296">                    
if (skip(avail) != avail) {</span>
+<span class="source-line-no">297</span><span id="line-297">                    
    // TODO What to do?</span>
+<span class="source-line-no">298</span><span id="line-298">                    
}</span>
+<span class="source-line-no">299</span><span id="line-299">                
}</span>
+<span class="source-line-no">300</span><span id="line-300">            }</span>
+<span class="source-line-no">301</span><span id="line-301">            closed 
= true;</span>
+<span class="source-line-no">302</span><span id="line-302">        }</span>
+<span class="source-line-no">303</span><span id="line-303"></span>
+<span class="source-line-no">304</span><span id="line-304">        /**</span>
+<span class="source-line-no">305</span><span id="line-305">         * Called 
for finding the separator.</span>
+<span class="source-line-no">306</span><span id="line-306">         */</span>
+<span class="source-line-no">307</span><span id="line-307">        private 
void findSeparator() {</span>
+<span class="source-line-no">308</span><span id="line-308">            pos = 
MultipartInput.this.findSeparator();</span>
+<span class="source-line-no">309</span><span id="line-309">            if (pos 
== -1) {</span>
+<span class="source-line-no">310</span><span id="line-310">                if 
(tail - head &gt; keepRegion) {</span>
+<span class="source-line-no">311</span><span id="line-311">                    
pad = keepRegion;</span>
+<span class="source-line-no">312</span><span id="line-312">                } 
else {</span>
+<span class="source-line-no">313</span><span id="line-313">                    
pad = tail - head;</span>
+<span class="source-line-no">314</span><span id="line-314">                
}</span>
+<span class="source-line-no">315</span><span id="line-315">            }</span>
+<span class="source-line-no">316</span><span id="line-316">        }</span>
+<span class="source-line-no">317</span><span id="line-317"></span>
+<span class="source-line-no">318</span><span id="line-318">        /**</span>
+<span class="source-line-no">319</span><span id="line-319">         * Gets the 
number of bytes, which have been read by the stream.</span>
+<span class="source-line-no">320</span><span id="line-320">         *</span>
+<span class="source-line-no">321</span><span id="line-321">         * @return 
Number of bytes, which have been read so far.</span>
+<span class="source-line-no">322</span><span id="line-322">         */</span>
+<span class="source-line-no">323</span><span id="line-323">        public long 
getBytesRead() {</span>
+<span class="source-line-no">324</span><span id="line-324">            return 
total;</span>
+<span class="source-line-no">325</span><span id="line-325">        }</span>
+<span class="source-line-no">326</span><span id="line-326"></span>
+<span class="source-line-no">327</span><span id="line-327">        /**</span>
+<span class="source-line-no">328</span><span id="line-328">         * Tests 
whether this instance is closed.</span>
+<span class="source-line-no">329</span><span id="line-329">         *</span>
+<span class="source-line-no">330</span><span id="line-330">         * @return 
whether this instance is closed.</span>
+<span class="source-line-no">331</span><span id="line-331">         */</span>
+<span class="source-line-no">332</span><span id="line-332">        public 
boolean isClosed() {</span>
+<span class="source-line-no">333</span><span id="line-333">            return 
closed;</span>
+<span class="source-line-no">334</span><span id="line-334">        }</span>
+<span class="source-line-no">335</span><span id="line-335"></span>
+<span class="source-line-no">336</span><span id="line-336">        /**</span>
+<span class="source-line-no">337</span><span id="line-337">         * Attempts 
to read more data.</span>
+<span class="source-line-no">338</span><span id="line-338">         *</span>
+<span class="source-line-no">339</span><span id="line-339">         * @return 
Number of available bytes</span>
+<span class="source-line-no">340</span><span id="line-340">         * @throws 
IOException An I/O error occurred.</span>
+<span class="source-line-no">341</span><span id="line-341">         */</span>
+<span class="source-line-no">342</span><span id="line-342">        private int 
makeAvailable() throws IOException {</span>
+<span class="source-line-no">343</span><span id="line-343">            if (pos 
!= -1) {</span>
+<span class="source-line-no">344</span><span id="line-344">                
return 0;</span>
+<span class="source-line-no">345</span><span id="line-345">            }</span>
 <span class="source-line-no">346</span><span id="line-346"></span>
-<span class="source-line-no">347</span><span id="line-347">                
findSeparator();</span>
-<span class="source-line-no">348</span><span id="line-348">                
final var av = available();</span>
-<span class="source-line-no">349</span><span id="line-349"></span>
-<span class="source-line-no">350</span><span id="line-350">                if 
(av &gt; 0 || pos != -1) {</span>
-<span class="source-line-no">351</span><span id="line-351">                    
return av;</span>
-<span class="source-line-no">352</span><span id="line-352">                
}</span>
-<span class="source-line-no">353</span><span id="line-353">            }</span>
-<span class="source-line-no">354</span><span id="line-354">        }</span>
-<span class="source-line-no">355</span><span id="line-355"></span>
-<span class="source-line-no">356</span><span id="line-356">        /**</span>
-<span class="source-line-no">357</span><span id="line-357">         * Reads 
the next byte in the stream.</span>
-<span class="source-line-no">358</span><span id="line-358">         *</span>
-<span class="source-line-no">359</span><span id="line-359">         * @return 
The next byte in the stream, as a non-negative integer, or -1 for EOF.</span>
-<span class="source-line-no">360</span><span id="line-360">         * @throws 
IOException An I/O error occurred.</span>
-<span class="source-line-no">361</span><span id="line-361">         */</span>
-<span class="source-line-no">362</span><span id="line-362">        
@Override</span>
-<span class="source-line-no">363</span><span id="line-363">        public int 
read() throws IOException {</span>
-<span class="source-line-no">364</span><span id="line-364">            
checkOpen();</span>
-<span class="source-line-no">365</span><span id="line-365">            if 
(available() == 0 &amp;&amp; makeAvailable() == 0) {</span>
-<span class="source-line-no">366</span><span id="line-366">                
return -1;</span>
-<span class="source-line-no">367</span><span id="line-367">            }</span>
-<span class="source-line-no">368</span><span id="line-368">            
++total;</span>
-<span class="source-line-no">369</span><span id="line-369">            final 
int b = buffer[head++];</span>
-<span class="source-line-no">370</span><span id="line-370">            if (b 
&gt;= 0) {</span>
-<span class="source-line-no">371</span><span id="line-371">                
return b;</span>
-<span class="source-line-no">372</span><span id="line-372">            }</span>
-<span class="source-line-no">373</span><span id="line-373">            return 
b + BYTE_POSITIVE_OFFSET;</span>
-<span class="source-line-no">374</span><span id="line-374">        }</span>
-<span class="source-line-no">375</span><span id="line-375"></span>
-<span class="source-line-no">376</span><span id="line-376">        /**</span>
-<span class="source-line-no">377</span><span id="line-377">         * Reads 
bytes into the given buffer.</span>
-<span class="source-line-no">378</span><span id="line-378">         *</span>
-<span class="source-line-no">379</span><span id="line-379">         * @param b 
  The destination buffer, where to write to.</span>
-<span class="source-line-no">380</span><span id="line-380">         * @param 
off Offset of the first byte in the buffer.</span>
-<span class="source-line-no">381</span><span id="line-381">         * @param 
len Maximum number of bytes to read.</span>
-<span class="source-line-no">382</span><span id="line-382">         * @return 
Number of bytes, which have been actually read, or -1 for EOF.</span>
-<span class="source-line-no">383</span><span id="line-383">         * @throws 
IOException An I/O error occurred.</span>
-<span class="source-line-no">384</span><span id="line-384">         */</span>
-<span class="source-line-no">385</span><span id="line-385">        
@Override</span>
-<span class="source-line-no">386</span><span id="line-386">        public int 
read(final byte[] b, final int off, final int len) throws IOException {</span>
-<span class="source-line-no">387</span><span id="line-387">            
checkOpen();</span>
-<span class="source-line-no">388</span><span id="line-388">            if (len 
== 0) {</span>
-<span class="source-line-no">389</span><span id="line-389">                
return 0;</span>
-<span class="source-line-no">390</span><span id="line-390">            }</span>
-<span class="source-line-no">391</span><span id="line-391">            var res 
= available();</span>
-<span class="source-line-no">392</span><span id="line-392">            if (res 
== 0) {</span>
-<span class="source-line-no">393</span><span id="line-393">                res 
= makeAvailable();</span>
-<span class="source-line-no">394</span><span id="line-394">                if 
(res == 0) {</span>
-<span class="source-line-no">395</span><span id="line-395">                    
return -1;</span>
-<span class="source-line-no">396</span><span id="line-396">                
}</span>
-<span class="source-line-no">397</span><span id="line-397">            }</span>
-<span class="source-line-no">398</span><span id="line-398">            res = 
Math.min(res, len);</span>
-<span class="source-line-no">399</span><span id="line-399">            
System.arraycopy(buffer, head, b, off, res);</span>
-<span class="source-line-no">400</span><span id="line-400">            head += 
res;</span>
-<span class="source-line-no">401</span><span id="line-401">            total 
+= res;</span>
-<span class="source-line-no">402</span><span id="line-402">            return 
res;</span>
-<span class="source-line-no">403</span><span id="line-403">        }</span>
-<span class="source-line-no">404</span><span id="line-404"></span>
-<span class="source-line-no">405</span><span id="line-405">        /**</span>
-<span class="source-line-no">406</span><span id="line-406">         * Skips 
the given number of bytes.</span>
-<span class="source-line-no">407</span><span id="line-407">         *</span>
-<span class="source-line-no">408</span><span id="line-408">         * @param 
bytes Number of bytes to skip.</span>
-<span class="source-line-no">409</span><span id="line-409">         * @return 
The number of bytes, which have actually been skipped.</span>
-<span class="source-line-no">410</span><span id="line-410">         * @throws 
IOException An I/O error occurred.</span>
-<span class="source-line-no">411</span><span id="line-411">         */</span>
-<span class="source-line-no">412</span><span id="line-412">        
@Override</span>
-<span class="source-line-no">413</span><span id="line-413">        public long 
skip(final long bytes) throws IOException {</span>
-<span class="source-line-no">414</span><span id="line-414">            
checkOpen();</span>
-<span class="source-line-no">415</span><span id="line-415">            var 
available = available();</span>
-<span class="source-line-no">416</span><span id="line-416">            if 
(available == 0) {</span>
-<span class="source-line-no">417</span><span id="line-417">                
available = makeAvailable();</span>
-<span class="source-line-no">418</span><span id="line-418">                if 
(available == 0) {</span>
-<span class="source-line-no">419</span><span id="line-419">                    
return 0;</span>
-<span class="source-line-no">420</span><span id="line-420">                
}</span>
-<span class="source-line-no">421</span><span id="line-421">            }</span>
-<span class="source-line-no">422</span><span id="line-422">            // Fix 
"Implicit narrowing conversion in compound assignment"</span>
-<span class="source-line-no">423</span><span id="line-423">            // 
https://github.com/apache/commons-fileupload/security/code-scanning/118</span>
-<span class="source-line-no">424</span><span id="line-424">            // 
Math.min always returns an int because available is an int.</span>
-<span class="source-line-no">425</span><span id="line-425">            final 
var res = Math.toIntExact(Math.min(available, bytes));</span>
-<span class="source-line-no">426</span><span id="line-426">            head += 
res;</span>
-<span class="source-line-no">427</span><span id="line-427">            return 
res;</span>
-<span class="source-line-no">428</span><span id="line-428">        }</span>
-<span class="source-line-no">429</span><span id="line-429"></span>
-<span class="source-line-no">430</span><span id="line-430">    }</span>
-<span class="source-line-no">431</span><span id="line-431"></span>
-<span class="source-line-no">432</span><span id="line-432">    /**</span>
-<span class="source-line-no">433</span><span id="line-433">     * Signals that 
the input stream fails to follow the required syntax.</span>
-<span class="source-line-no">434</span><span id="line-434">     */</span>
-<span class="source-line-no">435</span><span id="line-435">    public static 
class MalformedStreamException extends FileUploadException {</span>
-<span class="source-line-no">436</span><span id="line-436"></span>
-<span class="source-line-no">437</span><span id="line-437">        /**</span>
-<span class="source-line-no">438</span><span id="line-438">         * The UID 
to use when serializing this instance.</span>
-<span class="source-line-no">439</span><span id="line-439">         */</span>
-<span class="source-line-no">440</span><span id="line-440">        private 
static final long serialVersionUID = 2;</span>
-<span class="source-line-no">441</span><span id="line-441"></span>
-<span class="source-line-no">442</span><span id="line-442">        /**</span>
-<span class="source-line-no">443</span><span id="line-443">         * 
Constructs an {@code MalformedStreamException} with the specified detail 
message.</span>
-<span class="source-line-no">444</span><span id="line-444">         *</span>
-<span class="source-line-no">445</span><span id="line-445">         * @param 
message The detail message.</span>
-<span class="source-line-no">446</span><span id="line-446">         */</span>
-<span class="source-line-no">447</span><span id="line-447">        public 
MalformedStreamException(final String message) {</span>
-<span class="source-line-no">448</span><span id="line-448">            
super(message);</span>
-<span class="source-line-no">449</span><span id="line-449">        }</span>
-<span class="source-line-no">450</span><span id="line-450"></span>
-<span class="source-line-no">451</span><span id="line-451">        /**</span>
-<span class="source-line-no">452</span><span id="line-452">         * 
Constructs an {@code MalformedStreamException} with the specified detail 
message.</span>
-<span class="source-line-no">453</span><span id="line-453">         *</span>
-<span class="source-line-no">454</span><span id="line-454">         * @param 
message The detail message.</span>
-<span class="source-line-no">455</span><span id="line-455">         * @param 
cause   The cause (which is saved for later retrieval by the {@link 
#getCause()} method). (A null value is permitted, and indicates that the</span>
-<span class="source-line-no">456</span><span id="line-456">         *          
      cause is nonexistent or unknown.)</span>
-<span class="source-line-no">457</span><span id="line-457">         */</span>
-<span class="source-line-no">458</span><span id="line-458">        public 
MalformedStreamException(final String message, final Throwable cause) {</span>
-<span class="source-line-no">459</span><span id="line-459">            
super(message, cause);</span>
-<span class="source-line-no">460</span><span id="line-460">        }</span>
-<span class="source-line-no">461</span><span id="line-461"></span>
-<span class="source-line-no">462</span><span id="line-462">    }</span>
+<span class="source-line-no">347</span><span id="line-347">            // Move 
the data to the beginning of the buffer.</span>
+<span class="source-line-no">348</span><span id="line-348">            total 
+= tail - head - pad;</span>
+<span class="source-line-no">349</span><span id="line-349">            
System.arraycopy(buffer, tail - pad, buffer, 0, pad);</span>
+<span class="source-line-no">350</span><span id="line-350"></span>
+<span class="source-line-no">351</span><span id="line-351">            // 
Refill buffer with new data.</span>
+<span class="source-line-no">352</span><span id="line-352">            head = 
0;</span>
+<span class="source-line-no">353</span><span id="line-353">            tail = 
pad;</span>
+<span class="source-line-no">354</span><span id="line-354"></span>
+<span class="source-line-no">355</span><span id="line-355">            for 
(;;) {</span>
+<span class="source-line-no">356</span><span id="line-356">                
final var bytesRead = input.read(buffer, tail, bufSize - tail);</span>
+<span class="source-line-no">357</span><span id="line-357">                if 
(bytesRead == -1) {</span>
+<span class="source-line-no">358</span><span id="line-358">                    
// The last pad amount is left in the buffer.</span>
+<span class="source-line-no">359</span><span id="line-359">                    
// Boundary can't be in there so signal an error</span>
+<span class="source-line-no">360</span><span id="line-360">                    
// condition.</span>
+<span class="source-line-no">361</span><span id="line-361">                    
final var msg = "Stream ended unexpectedly";</span>
+<span class="source-line-no">362</span><span id="line-362">                    
throw new MalformedStreamException(msg);</span>
+<span class="source-line-no">363</span><span id="line-363">                
}</span>
+<span class="source-line-no">364</span><span id="line-364">                if 
(notifier != null) {</span>
+<span class="source-line-no">365</span><span id="line-365">                    
notifier.noteBytesRead(bytesRead);</span>
+<span class="source-line-no">366</span><span id="line-366">                
}</span>
+<span class="source-line-no">367</span><span id="line-367">                
tail += bytesRead;</span>
+<span class="source-line-no">368</span><span id="line-368"></span>
+<span class="source-line-no">369</span><span id="line-369">                
findSeparator();</span>
+<span class="source-line-no">370</span><span id="line-370">                
final var av = available();</span>
+<span class="source-line-no">371</span><span id="line-371"></span>
+<span class="source-line-no">372</span><span id="line-372">                if 
(av &gt; 0 || pos != -1) {</span>
+<span class="source-line-no">373</span><span id="line-373">                    
return av;</span>
+<span class="source-line-no">374</span><span id="line-374">                
}</span>
+<span class="source-line-no">375</span><span id="line-375">            }</span>
+<span class="source-line-no">376</span><span id="line-376">        }</span>
+<span class="source-line-no">377</span><span id="line-377"></span>
+<span class="source-line-no">378</span><span id="line-378">        /**</span>
+<span class="source-line-no">379</span><span id="line-379">         * Reads 
the next byte in the stream.</span>
+<span class="source-line-no">380</span><span id="line-380">         *</span>
+<span class="source-line-no">381</span><span id="line-381">         * @return 
The next byte in the stream, as a non-negative integer, or -1 for EOF.</span>
+<span class="source-line-no">382</span><span id="line-382">         * @throws 
IOException An I/O error occurred.</span>
+<span class="source-line-no">383</span><span id="line-383">         */</span>
+<span class="source-line-no">384</span><span id="line-384">        
@Override</span>
+<span class="source-line-no">385</span><span id="line-385">        public int 
read() throws IOException {</span>
+<span class="source-line-no">386</span><span id="line-386">            
checkOpen();</span>
+<span class="source-line-no">387</span><span id="line-387">            if 
(available() == 0 &amp;&amp; makeAvailable() == 0) {</span>
+<span class="source-line-no">388</span><span id="line-388">                
return -1;</span>
+<span class="source-line-no">389</span><span id="line-389">            }</span>
+<span class="source-line-no">390</span><span id="line-390">            
++total;</span>
+<span class="source-line-no">391</span><span id="line-391">            final 
int b = buffer[head++];</span>
+<span class="source-line-no">392</span><span id="line-392">            if (b 
&gt;= 0) {</span>
+<span class="source-line-no">393</span><span id="line-393">                
return b;</span>
+<span class="source-line-no">394</span><span id="line-394">            }</span>
+<span class="source-line-no">395</span><span id="line-395">            return 
b + BYTE_POSITIVE_OFFSET;</span>
+<span class="source-line-no">396</span><span id="line-396">        }</span>
+<span class="source-line-no">397</span><span id="line-397"></span>
+<span class="source-line-no">398</span><span id="line-398">        /**</span>
+<span class="source-line-no">399</span><span id="line-399">         * Reads 
bytes into the given buffer.</span>
+<span class="source-line-no">400</span><span id="line-400">         *</span>
+<span class="source-line-no">401</span><span id="line-401">         * @param b 
  The destination buffer, where to write to.</span>
+<span class="source-line-no">402</span><span id="line-402">         * @param 
off Offset of the first byte in the buffer.</span>
+<span class="source-line-no">403</span><span id="line-403">         * @param 
len Maximum number of bytes to read.</span>
+<span class="source-line-no">404</span><span id="line-404">         * @return 
Number of bytes, which have been actually read, or -1 for EOF.</span>
+<span class="source-line-no">405</span><span id="line-405">         * @throws 
IOException An I/O error occurred.</span>
+<span class="source-line-no">406</span><span id="line-406">         */</span>
+<span class="source-line-no">407</span><span id="line-407">        
@Override</span>
+<span class="source-line-no">408</span><span id="line-408">        public int 
read(final byte[] b, final int off, final int len) throws IOException {</span>
+<span class="source-line-no">409</span><span id="line-409">            
checkOpen();</span>
+<span class="source-line-no">410</span><span id="line-410">            if (len 
== 0) {</span>
+<span class="source-line-no">411</span><span id="line-411">                
return 0;</span>
+<span class="source-line-no">412</span><span id="line-412">            }</span>
+<span class="source-line-no">413</span><span id="line-413">            var res 
= available();</span>
+<span class="source-line-no">414</span><span id="line-414">            if (res 
== 0) {</span>
+<span class="source-line-no">415</span><span id="line-415">                res 
= makeAvailable();</span>
+<span class="source-line-no">416</span><span id="line-416">                if 
(res == 0) {</span>
+<span class="source-line-no">417</span><span id="line-417">                    
return -1;</span>
+<span class="source-line-no">418</span><span id="line-418">                
}</span>
+<span class="source-line-no">419</span><span id="line-419">            }</span>
+<span class="source-line-no">420</span><span id="line-420">            res = 
Math.min(res, len);</span>
+<span class="source-line-no">421</span><span id="line-421">            
System.arraycopy(buffer, head, b, off, res);</span>
+<span class="source-line-no">422</span><span id="line-422">            head += 
res;</span>
+<span class="source-line-no">423</span><span id="line-423">            total 
+= res;</span>
+<span class="source-line-no">424</span><span id="line-424">            return 
res;</span>
+<span class="source-line-no">425</span><span id="line-425">        }</span>
+<span class="source-line-no">426</span><span id="line-426"></span>
+<span class="source-line-no">427</span><span id="line-427">        /**</span>
+<span class="source-line-no">428</span><span id="line-428">         * Skips 
the given number of bytes.</span>
+<span class="source-line-no">429</span><span id="line-429">         *</span>
+<span class="source-line-no">430</span><span id="line-430">         * @param 
bytes Number of bytes to skip.</span>
+<span class="source-line-no">431</span><span id="line-431">         * @return 
The number of bytes, which have actually been skipped.</span>
+<span class="source-line-no">432</span><span id="line-432">         * @throws 
IOException An I/O error occurred.</span>
+<span class="source-line-no">433</span><span id="line-433">         */</span>
+<span class="source-line-no">434</span><span id="line-434">        
@Override</span>
+<span class="source-line-no">435</span><span id="line-435">        public long 
skip(final long bytes) throws IOException {</span>
+<span class="source-line-no">436</span><span id="line-436">            
checkOpen();</span>
+<span class="source-line-no">437</span><span id="line-437">            var 
available = available();</span>
+<span class="source-line-no">438</span><span id="line-438">            if 
(available == 0) {</span>
+<span class="source-line-no">439</span><span id="line-439">                
available = makeAvailable();</span>
+<span class="source-line-no">440</span><span id="line-440">                if 
(available == 0) {</span>
+<span class="source-line-no">441</span><span id="line-441">                    
return 0;</span>
+<span class="source-line-no">442</span><span id="line-442">                
}</span>
+<span class="source-line-no">443</span><span id="line-443">            }</span>
+<span class="source-line-no">444</span><span id="line-444">            // Fix 
"Implicit narrowing conversion in compound assignment"</span>
+<span class="source-line-no">445</span><span id="line-445">            // 
https://github.com/apache/commons-fileupload/security/code-scanning/118</span>
+<span class="source-line-no">446</span><span id="line-446">            // 
Math.min always returns an int because available is an int.</span>
+<span class="source-line-no">447</span><span id="line-447">            final 
var res = Math.toIntExact(Math.min(available, bytes));</span>
+<span class="source-line-no">448</span><span id="line-448">            head += 
res;</span>
+<span class="source-line-no">449</span><span id="line-449">            return 
res;</span>
+<span class="source-line-no">450</span><span id="line-450">        }</span>
+<span class="source-line-no">451</span><span id="line-451"></span>
+<span class="source-line-no">452</span><span id="line-452">    }</span>
+<span class="source-line-no">453</span><span id="line-453"></span>
+<span class="source-line-no">454</span><span id="line-454">    /**</span>
+<span class="source-line-no">455</span><span id="line-455">     * Signals that 
the input stream fails to follow the required syntax.</span>
+<span class="source-line-no">456</span><span id="line-456">     */</span>
+<span class="source-line-no">457</span><span id="line-457">    public static 
class MalformedStreamException extends FileUploadException {</span>
+<span class="source-line-no">458</span><span id="line-458"></span>
+<span class="source-line-no">459</span><span id="line-459">        /**</span>
+<span class="source-line-no">460</span><span id="line-460">         * The UID 
to use when serializing this instance.</span>
+<span class="source-line-no">461</span><span id="line-461">         */</span>
+<span class="source-line-no">462</span><span id="line-462">        private 
static final long serialVersionUID = 2;</span>
 <span class="source-line-no">463</span><span id="line-463"></span>
-<span class="source-line-no">464</span><span id="line-464">    /**</span>
-<span class="source-line-no">465</span><span id="line-465">     * Internal 
class, which is used to invoke the {@link ProgressListener}.</span>
-<span class="source-line-no">466</span><span id="line-466">     */</span>
-<span class="source-line-no">467</span><span id="line-467">    public static 
class ProgressNotifier {</span>
-<span class="source-line-no">468</span><span id="line-468"></span>
-<span class="source-line-no">469</span><span id="line-469">        /**</span>
-<span class="source-line-no">470</span><span id="line-470">         * The 
listener to invoke.</span>
-<span class="source-line-no">471</span><span id="line-471">         */</span>
-<span class="source-line-no">472</span><span id="line-472">        private 
final ProgressListener progressListener;</span>
-<span class="source-line-no">473</span><span id="line-473"></span>
-<span class="source-line-no">474</span><span id="line-474">        /**</span>
-<span class="source-line-no">475</span><span id="line-475">         * Number 
of expected bytes, if known, or -1.</span>
-<span class="source-line-no">476</span><span id="line-476">         */</span>
-<span class="source-line-no">477</span><span id="line-477">        private 
final long contentLength;</span>
-<span class="source-line-no">478</span><span id="line-478"></span>
-<span class="source-line-no">479</span><span id="line-479">        /**</span>
-<span class="source-line-no">480</span><span id="line-480">         * Number 
of bytes, which have been read so far.</span>
-<span class="source-line-no">481</span><span id="line-481">         */</span>
-<span class="source-line-no">482</span><span id="line-482">        private 
long bytesRead;</span>
+<span class="source-line-no">464</span><span id="line-464">        /**</span>
+<span class="source-line-no">465</span><span id="line-465">         * 
Constructs an {@code MalformedStreamException} with the specified detail 
message.</span>
+<span class="source-line-no">466</span><span id="line-466">         *</span>
+<span class="source-line-no">467</span><span id="line-467">         * @param 
message The detail message.</span>
+<span class="source-line-no">468</span><span id="line-468">         */</span>
+<span class="source-line-no">469</span><span id="line-469">        public 
MalformedStreamException(final String message) {</span>
+<span class="source-line-no">470</span><span id="line-470">            
super(message);</span>
+<span class="source-line-no">471</span><span id="line-471">        }</span>
+<span class="source-line-no">472</span><span id="line-472"></span>
+<span class="source-line-no">473</span><span id="line-473">        /**</span>
+<span class="source-line-no">474</span><span id="line-474">         * 
Constructs an {@code MalformedStreamException} with the specified detail 
message.</span>
+<span class="source-line-no">475</span><span id="line-475">         *</span>
+<span class="source-line-no">476</span><span id="line-476">         * @param 
message The detail message.</span>
+<span class="source-line-no">477</span><span id="line-477">         * @param 
cause   The cause (which is saved for later retrieval by the {@link 
#getCause()} method). (A null value is permitted, and indicates that the</span>
+<span class="source-line-no">478</span><span id="line-478">         *          
      cause is nonexistent or unknown.)</span>
+<span class="source-line-no">479</span><span id="line-479">         */</span>
+<span class="source-line-no">480</span><span id="line-480">        public 
MalformedStreamException(final String message, final Throwable cause) {</span>
+<span class="source-line-no">481</span><span id="line-481">            
super(message, cause);</span>
+<span class="source-line-no">482</span><span id="line-482">        }</span>
 <span class="source-line-no">483</span><span id="line-483"></span>
-<span class="source-line-no">484</span><span id="line-484">        /**</span>
-<span class="source-line-no">485</span><span id="line-485">         * Number 
of items, which have been read so far.</span>
-<span class="source-line-no">486</span><span id="line-486">         */</span>
-<span class="source-line-no">487</span><span id="line-487">        private int 
items;</span>
-<span class="source-line-no">488</span><span id="line-488"></span>
-<span class="source-line-no">489</span><span id="line-489">        /**</span>
-<span class="source-line-no">490</span><span id="line-490">         * Creates 
a new instance with the given listener and content length.</span>
-<span class="source-line-no">491</span><span id="line-491">         *</span>
-<span class="source-line-no">492</span><span id="line-492">         * @param 
progressListener The listener to invoke.</span>
-<span class="source-line-no">493</span><span id="line-493">         * @param 
contentLength    The expected content length.</span>
-<span class="source-line-no">494</span><span id="line-494">         */</span>
-<span class="source-line-no">495</span><span id="line-495">        public 
ProgressNotifier(final ProgressListener progressListener, final long 
contentLength) {</span>
-<span class="source-line-no">496</span><span id="line-496">            
this.progressListener = progressListener != null ? progressListener : 
ProgressListener.NOP;</span>
-<span class="source-line-no">497</span><span id="line-497">            
this.contentLength = contentLength;</span>
-<span class="source-line-no">498</span><span id="line-498">        }</span>
-<span class="source-line-no">499</span><span id="line-499"></span>
-<span class="source-line-no">500</span><span id="line-500">        /**</span>
-<span class="source-line-no">501</span><span id="line-501">         * Called 
to indicate that bytes have been read.</span>
-<span class="source-line-no">502</span><span id="line-502">         *</span>
-<span class="source-line-no">503</span><span id="line-503">         * @param 
byteCount Number of bytes, which have been read.</span>
-<span class="source-line-no">504</span><span id="line-504">         */</span>
-<span class="source-line-no">505</span><span id="line-505">        void 
noteBytesRead(final int byteCount) {</span>
-<span class="source-line-no">506</span><span id="line-506">            
//</span>
-<span class="source-line-no">507</span><span id="line-507">            // 
Indicates, that the given number of bytes have been read from the input 
stream.</span>
-<span class="source-line-no">508</span><span id="line-508">            
//</span>
-<span class="source-line-no">509</span><span id="line-509">            
bytesRead += byteCount;</span>
-<span class="source-line-no">510</span><span id="line-510">            
notifyListener();</span>
-<span class="source-line-no">511</span><span id="line-511">        }</span>
-<span class="source-line-no">512</span><span id="line-512"></span>
-<span class="source-line-no">513</span><span id="line-513">        /**</span>
-<span class="source-line-no">514</span><span id="line-514">         * Called 
to indicate, that a new file item has been detected.</span>
-<span class="source-line-no">515</span><span id="line-515">         */</span>
-<span class="source-line-no">516</span><span id="line-516">        public void 
noteItem() {</span>
-<span class="source-line-no">517</span><span id="line-517">            
++items;</span>
-<span class="source-line-no">518</span><span id="line-518">            
notifyListener();</span>
-<span class="source-line-no">519</span><span id="line-519">        }</span>
-<span class="source-line-no">520</span><span id="line-520"></span>
-<span class="source-line-no">521</span><span id="line-521">        /**</span>
-<span class="source-line-no">522</span><span id="line-522">         * Called 
for notifying the listener.</span>
-<span class="source-line-no">523</span><span id="line-523">         */</span>
-<span class="source-line-no">524</span><span id="line-524">        private 
void notifyListener() {</span>
-<span class="source-line-no">525</span><span id="line-525">            
progressListener.update(bytesRead, contentLength, items);</span>
-<span class="source-line-no">526</span><span id="line-526">        }</span>
-<span class="source-line-no">527</span><span id="line-527"></span>
-<span class="source-line-no">528</span><span id="line-528">    }</span>
-<span class="source-line-no">529</span><span id="line-529"></span>
-<span class="source-line-no">530</span><span id="line-530">    /**</span>
-<span class="source-line-no">531</span><span id="line-531">     * The Carriage 
Return ASCII character value.</span>
-<span class="source-line-no">532</span><span id="line-532">     */</span>
-<span class="source-line-no">533</span><span id="line-533">    public static 
final byte CR = 0x0D;</span>
+<span class="source-line-no">484</span><span id="line-484">    }</span>
+<span class="source-line-no">485</span><span id="line-485"></span>
+<span class="source-line-no">486</span><span id="line-486">    /**</span>
+<span class="source-line-no">487</span><span id="line-487">     * Internal 
class, which is used to invoke the {@link ProgressListener}.</span>
+<span class="source-line-no">488</span><span id="line-488">     */</span>
+<span class="source-line-no">489</span><span id="line-489">    public static 
class ProgressNotifier {</span>
+<span class="source-line-no">490</span><span id="line-490"></span>
+<span class="source-line-no">491</span><span id="line-491">        /**</span>
+<span class="source-line-no">492</span><span id="line-492">         * The 
listener to invoke.</span>
+<span class="source-line-no">493</span><span id="line-493">         */</span>
+<span class="source-line-no">494</span><span id="line-494">        private 
final ProgressListener progressListener;</span>
+<span class="source-line-no">495</span><span id="line-495"></span>
+<span class="source-line-no">496</span><span id="line-496">        /**</span>
+<span class="source-line-no">497</span><span id="line-497">         * Number 
of expected bytes, if known, or -1.</span>
+<span class="source-line-no">498</span><span id="line-498">         */</span>
+<span class="source-line-no">499</span><span id="line-499">        private 
final long contentLength;</span>
+<span class="source-line-no">500</span><span id="line-500"></span>
+<span class="source-line-no">501</span><span id="line-501">        /**</span>
+<span class="source-line-no">502</span><span id="line-502">         * Number 
of bytes, which have been read so far.</span>
+<span class="source-line-no">503</span><span id="line-503">         */</span>
+<span class="source-line-no">504</span><span id="line-504">        private 
long bytesRead;</span>
+<span class="source-line-no">505</span><span id="line-505"></span>
+<span class="source-line-no">506</span><span id="line-506">        /**</span>
+<span class="source-line-no">507</span><span id="line-507">         * Number 
of items, which have been read so far.</span>
+<span class="source-line-no">508</span><span id="line-508">         */</span>
+<span class="source-line-no">509</span><span id="line-509">        private int 
items;</span>
+<span class="source-line-no">510</span><span id="line-510"></span>
+<span class="source-line-no">511</span><span id="line-511">        /**</span>
+<span class="source-line-no">512</span><span id="line-512">         * Creates 
a new instance with the given listener and content length.</span>
+<span class="source-line-no">513</span><span id="line-513">         *</span>
+<span class="source-line-no">514</span><span id="line-514">         * @param 
progressListener The listener to invoke.</span>
+<span class="source-line-no">515</span><span id="line-515">         * @param 
contentLength    The expected content length.</span>
+<span class="source-line-no">516</span><span id="line-516">         */</span>
+<span class="source-line-no">517</span><span id="line-517">        public 
ProgressNotifier(final ProgressListener progressListener, final long 
contentLength) {</span>
+<span class="source-line-no">518</span><span id="line-518">            
this.progressListener = progressListener != null ? progressListener : 
ProgressListener.NOP;</span>
+<span class="source-line-no">519</span><span id="line-519">            
this.contentLength = contentLength;</span>
+<span class="source-line-no">520</span><span id="line-520">        }</span>
+<span class="source-line-no">521</span><span id="line-521"></span>
+<span class="source-line-no">522</span><span id="line-522">        /**</span>
+<span class="source-line-no">523</span><span id="line-523">         * Called 
to indicate that bytes have been read.</span>
+<span class="source-line-no">524</span><span id="line-524">         *</span>
+<span class="source-line-no">525</span><span id="line-525">         * @param 
byteCount Number of bytes, which have been read.</span>
+<span class="source-line-no">526</span><span id="line-526">         */</span>
+<span class="source-line-no">527</span><span id="line-527">        void 
noteBytesRead(final int byteCount) {</span>
+<span class="source-line-no">528</span><span id="line-528">            
//</span>
+<span class="source-line-no">529</span><span id="line-529">            // 
Indicates, that the given number of bytes have been read from the input 
stream.</span>
+<span class="source-line-no">530</span><span id="line-530">            
//</span>
+<span class="source-line-no">531</span><span id="line-531">            
bytesRead += byteCount;</span>
+<span class="source-line-no">532</span><span id="line-532">            
notifyListener();</span>
+<span class="source-line-no">533</span><span id="line-533">        }</span>
 <span class="source-line-no">534</span><span id="line-534"></span>
-<span class="source-line-no">535</span><span id="line-535">    /**</span>
-<span class="source-line-no">536</span><span id="line-536">     * The Line 
Feed ASCII character value.</span>
-<span class="source-line-no">537</span><span id="line-537">     */</span>
-<span class="source-line-no">538</span><span id="line-538">    public static 
final byte LF = 0x0A;</span>
-<span class="source-line-no">539</span><span id="line-539"></span>
-<span class="source-line-no">540</span><span id="line-540">    /**</span>
-<span class="source-line-no">541</span><span id="line-541">     * The dash (-) 
ASCII character value.</span>
-<span class="source-line-no">542</span><span id="line-542">     */</span>
-<span class="source-line-no">543</span><span id="line-543">    public static 
final byte DASH = 0x2D;</span>
-<span class="source-line-no">544</span><span id="line-544"></span>
-<span class="source-line-no">545</span><span id="line-545">    /**</span>
-<span class="source-line-no">546</span><span id="line-546">     * The maximum 
length of {@code header-part} that will be processed (10 kilobytes = 10240 
bytes.).</span>
-<span class="source-line-no">547</span><span id="line-547">     */</span>
-<span class="source-line-no">548</span><span id="line-548">    public static 
final int HEADER_PART_SIZE_MAX = 10_240;</span>
+<span class="source-line-no">535</span><span id="line-535">        /**</span>
+<span class="source-line-no">536</span><span id="line-536">         * Called 
to indicate, that a new file item has been detected.</span>
+<span class="source-line-no">537</span><span id="line-537">         */</span>
+<span class="source-line-no">538</span><span id="line-538">        public void 
noteItem() {</span>
+<span class="source-line-no">539</span><span id="line-539">            
++items;</span>
+<span class="source-line-no">540</span><span id="line-540">            
notifyListener();</span>
+<span class="source-line-no">541</span><span id="line-541">        }</span>
+<span class="source-line-no">542</span><span id="line-542"></span>
+<span class="source-line-no">543</span><span id="line-543">        /**</span>
+<span class="source-line-no">544</span><span id="line-544">         * Called 
for notifying the listener.</span>
+<span class="source-line-no">545</span><span id="line-545">         */</span>
+<span class="source-line-no">546</span><span id="line-546">        private 
void notifyListener() {</span>
+<span class="source-line-no">547</span><span id="line-547">            
progressListener.update(bytesRead, contentLength, items);</span>
+<span class="source-line-no">548</span><span id="line-548">        }</span>
 <span class="source-line-no">549</span><span id="line-549"></span>
-<span class="source-line-no">550</span><span id="line-550">    /**</span>
-<span class="source-line-no">551</span><span id="line-551">     * The default 
length of the buffer used for processing a request.</span>
-<span class="source-line-no">552</span><span id="line-552">     */</span>
-<span class="source-line-no">553</span><span id="line-553">    static final 
int DEFAULT_BUFSIZE = 4096;</span>
-<span class="source-line-no">554</span><span id="line-554"></span>
-<span class="source-line-no">555</span><span id="line-555">    /**</span>
-<span class="source-line-no">556</span><span id="line-556">     * A byte 
sequence that marks the end of {@code header-part} ({@code CRLFCRLF}).</span>
-<span class="source-line-no">557</span><span id="line-557">     */</span>
-<span class="source-line-no">558</span><span id="line-558">    static final 
byte[] HEADER_SEPARATOR = { CR, LF, CR, LF };</span>
-<span class="source-line-no">559</span><span id="line-559"></span>
-<span class="source-line-no">560</span><span id="line-560">    /**</span>
-<span class="source-line-no">561</span><span id="line-561">     * A byte 
sequence that that follows a delimiter that will be followed by an 
encapsulation ({@code CRLF}).</span>
-<span class="source-line-no">562</span><span id="line-562">     */</span>
-<span class="source-line-no">563</span><span id="line-563">    static final 
byte[] FIELD_SEPARATOR = { CR, LF };</span>
-<span class="source-line-no">564</span><span id="line-564"></span>
-<span class="source-line-no">565</span><span id="line-565">    /**</span>
-<span class="source-line-no">566</span><span id="line-566">     * A byte 
sequence that that follows a delimiter of the last encapsulation in the stream 
({@code --}).</span>
-<span class="source-line-no">567</span><span id="line-567">     */</span>
-<span class="source-line-no">568</span><span id="line-568">    static final 
byte[] STREAM_TERMINATOR = { DASH, DASH };</span>
-<span class="source-line-no">569</span><span id="line-569"></span>
-<span class="source-line-no">570</span><span id="line-570">    /**</span>
-<span class="source-line-no">571</span><span id="line-571">     * A byte 
sequence that precedes a boundary ({@code CRLF--}).</span>
-<span class="source-line-no">572</span><span id="line-572">     */</span>
-<span class="source-line-no">573</span><span id="line-573">    static final 
byte[] BOUNDARY_PREFIX = { CR, LF, DASH, DASH };</span>
-<span class="source-line-no">574</span><span id="line-574"></span>
-<span class="source-line-no">575</span><span id="line-575">    /**</span>
-<span class="source-line-no">576</span><span id="line-576">     * Compares 
{@code count} first bytes in the arrays {@code a} and {@code b}.</span>
-<span class="source-line-no">577</span><span id="line-577">     *</span>
-<span class="source-line-no">578</span><span id="line-578">     * @param a     
The first array to compare.</span>
-<span class="source-line-no">579</span><span id="line-579">     * @param b     
The second array to compare.</span>
-<span class="source-line-no">580</span><span id="line-580">     * @param count 
How many bytes should be compared.</span>
-<span class="source-line-no">581</span><span id="line-581">     * @return 
{@code true} if {@code count} first bytes in arrays {@code a} and {@code b} are 
equal.</span>
-<span class="source-line-no">582</span><span id="line-582">     */</span>
-<span class="source-line-no">583</span><span id="line-583">    static boolean 
arrayEquals(final byte[] a, final byte[] b, final int count) {</span>
-<span class="source-line-no">584</span><span id="line-584">        for (var i 
= 0; i &lt; count; i++) {</span>
-<span class="source-line-no">585</span><span id="line-585">            if 
(a[i] != b[i]) {</span>
-<span class="source-line-no">586</span><span id="line-586">                
return false;</span>
-<span class="source-line-no">587</span><span id="line-587">            }</span>
-<span class="source-line-no">588</span><span id="line-588">        }</span>
-<span class="source-line-no">589</span><span id="line-589">        return 
true;</span>
-<span class="source-line-no">590</span><span id="line-590">    }</span>
-<span class="source-line-no">591</span><span id="line-591"></span>
-<span class="source-line-no">592</span><span id="line-592">    /**</span>
-<span class="source-line-no">593</span><span id="line-593">     * Constructs a 
new {@link Builder}.</span>
-<span class="source-line-no">594</span><span id="line-594">     *</span>
-<span class="source-line-no">595</span><span id="line-595">     * @return a 
new {@link Builder}.</span>

[... 858 lines stripped ...]


Reply via email to