480764 - Error parsing empty multipart.
Fixed by checking the presence of the last boundary as the first line.
This commit is contained in:
parent
0979125295
commit
487d0f2d5c
|
@ -175,7 +175,7 @@ public class MultiPartInputStreamParser
|
||||||
{
|
{
|
||||||
if (name == null)
|
if (name == null)
|
||||||
return null;
|
return null;
|
||||||
return (String)_headers.getValue(name.toLowerCase(Locale.ENGLISH), 0);
|
return _headers.getValue(name.toLowerCase(Locale.ENGLISH), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -357,7 +357,7 @@ public class MultiPartInputStreamParser
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|
||||||
Collection<List<Part>> values = _parts.values();
|
Collection<List<Part>> values = _parts.values();
|
||||||
List<Part> parts = new ArrayList<Part>();
|
List<Part> parts = new ArrayList<>();
|
||||||
for (List<Part> o: values)
|
for (List<Part> o: values)
|
||||||
{
|
{
|
||||||
List<Part> asList = LazyList.getList(o, false);
|
List<Part> asList = LazyList.getList(o, false);
|
||||||
|
@ -404,7 +404,7 @@ public class MultiPartInputStreamParser
|
||||||
{
|
{
|
||||||
parse();
|
parse();
|
||||||
Collection<List<Part>> values = _parts.values();
|
Collection<List<Part>> values = _parts.values();
|
||||||
List<Part> parts = new ArrayList<Part>();
|
List<Part> parts = new ArrayList<>();
|
||||||
for (List<Part> o: values)
|
for (List<Part> o: values)
|
||||||
{
|
{
|
||||||
List<Part> asList = LazyList.getList(o, false);
|
List<Part> asList = LazyList.getList(o, false);
|
||||||
|
@ -425,7 +425,7 @@ public class MultiPartInputStreamParser
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
parse();
|
parse();
|
||||||
return (Part)_parts.getValue(name, 0);
|
return _parts.getValue(name, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -443,7 +443,7 @@ public class MultiPartInputStreamParser
|
||||||
|
|
||||||
//initialize
|
//initialize
|
||||||
long total = 0; //keep running total of size of bytes read from input and throw an exception if exceeds MultipartConfigElement._maxRequestSize
|
long total = 0; //keep running total of size of bytes read from input and throw an exception if exceeds MultipartConfigElement._maxRequestSize
|
||||||
_parts = new MultiMap<Part>();
|
_parts = new MultiMap<>();
|
||||||
|
|
||||||
//if its not a multipart request, don't parse it
|
//if its not a multipart request, don't parse it
|
||||||
if (_contentType == null || !_contentType.startsWith("multipart/form-data"))
|
if (_contentType == null || !_contentType.startsWith("multipart/form-data"))
|
||||||
|
@ -477,7 +477,8 @@ public class MultiPartInputStreamParser
|
||||||
}
|
}
|
||||||
|
|
||||||
String boundary="--"+contentTypeBoundary;
|
String boundary="--"+contentTypeBoundary;
|
||||||
byte[] byteBoundary=(boundary+"--").getBytes(StandardCharsets.ISO_8859_1);
|
String lastBoundary=boundary+"--";
|
||||||
|
byte[] byteBoundary=lastBoundary.getBytes(StandardCharsets.ISO_8859_1);
|
||||||
|
|
||||||
// Get first boundary
|
// Get first boundary
|
||||||
String line = null;
|
String line = null;
|
||||||
|
@ -496,7 +497,7 @@ public class MultiPartInputStreamParser
|
||||||
|
|
||||||
boolean badFormatLogged = false;
|
boolean badFormatLogged = false;
|
||||||
line=line.trim();
|
line=line.trim();
|
||||||
while (line != null && !line.equals(boundary))
|
while (line != null && !line.equals(boundary) && !line.equals(lastBoundary))
|
||||||
{
|
{
|
||||||
if (!badFormatLogged)
|
if (!badFormatLogged)
|
||||||
{
|
{
|
||||||
|
@ -510,6 +511,10 @@ public class MultiPartInputStreamParser
|
||||||
if (line == null)
|
if (line == null)
|
||||||
throw new IOException("Missing initial multi part boundary");
|
throw new IOException("Missing initial multi part boundary");
|
||||||
|
|
||||||
|
// Empty multipart.
|
||||||
|
if (line.equals(lastBoundary))
|
||||||
|
return;
|
||||||
|
|
||||||
// Read each part
|
// Read each part
|
||||||
boolean lastPart=false;
|
boolean lastPart=false;
|
||||||
|
|
||||||
|
@ -519,7 +524,7 @@ public class MultiPartInputStreamParser
|
||||||
String contentType=null;
|
String contentType=null;
|
||||||
String contentTransferEncoding=null;
|
String contentTransferEncoding=null;
|
||||||
|
|
||||||
MultiMap<String> headers = new MultiMap<String>();
|
MultiMap<String> headers = new MultiMap<>();
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
line=((ReadLineInputStream)_in).readLine();
|
line=((ReadLineInputStream)_in).readLine();
|
||||||
|
|
Loading…
Reference in New Issue