in core/src/main/java/org/apache/james/mime4j/stream/MimeEntity.java [262:299]
protected boolean nextField() throws MimeException, IOException {
int maxHeaderCount = config.getMaxHeaderCount();
// the loop is here to transparently skip invalid headers
for (;;) {
if (endOfHeader) {
return false;
}
if (maxHeaderCount > 0 && headerCount >= maxHeaderCount) {
throw new MaxHeaderLimitException("Maximum header limit (" + maxHeaderCount + ") exceeded");
}
headerCount++;
fieldBuilder.reset();
readRawField();
try {
RawField rawfield = fieldBuilder.build();
if (rawfield == null) {
continue;
}
if (rawfield.getDelimiterIdx() != rawfield.getName().length()) {
monitor(Event.OBSOLETE_HEADER);
}
Field parsedField = bodyDescBuilder.addField(rawfield);
field = parsedField != null ? parsedField : rawfield;
return true;
} catch (MimeException e) {
monitor(Event.INVALID_HEADER);
if (config.isMalformedHeaderStartsBody()) {
LineReaderInputStream instream = getDataStream();
RecycledByteArrayBuffer buf = fieldBuilder.getRaw();
// Complain, if raw data is not available or cannot be 'unread'
if (buf == null || !instream.unread(buf)) {
throw new MimeParseEventException(Event.INVALID_HEADER);
}
return false;
}
}
}
}