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"> *
<p></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"> *
</p></span>
-<span class="source-line-no">125</span><span id="line-125"> *
<p></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"> *
<p></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"> *
</p></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"> *
<p></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"> *
</p></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 > 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 > 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 > 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 && 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
>= 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 > 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 && 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
>= 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 < 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 ...]