It was terminating early if a part happened to be of certain length.
Extra whitespace was included at the end of parts and there was also an
out-of-bounds memory access.
- /* The CRLF preceding the boundary delimiter is treated as part
- of the delimiter as per RFC 2046 */
- string::size_type part_end = line_start-1;
- if(content[part_end-1]=='\r')
- --part_end;
-
- SubMessage part = SubMessage::parse(content.substr(part_start, line_start-part_start));
+ /* The CRLF preceding the boundary delimiter is treated as part
+ of the delimiter as per RFC 2046 */
+ string::size_type part_end = line_start-1;
+ if(content[part_end-1]=='\r')
+ --part_end;
+
+ SubMessage part = SubMessage::parse(content.substr(part_start, part_end-part_start));
Header content_disposition(part, "Content-Disposition");
const Header::Value &cd_value = content_disposition.values.at(0);
if(cd_value.value=="form-data")
Header content_disposition(part, "Content-Disposition");
const Header::Value &cd_value = content_disposition.values.at(0);
if(cd_value.value=="form-data")
- if(!content.compare(line_start+2+boundary.size(), 2, "--"))
- break;
+ if(!content.compare(line_start+2+boundary.size(), 2, "--"))
+ break;
+ }