Issue #2679 - HTTP/2 Spec Compliance.

Fixed PRIORITY self-dependency.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
This commit is contained in:
Simone Bordet 2018-07-03 16:35:37 +02:00
parent 5836c50a20
commit d06d5f5a71
3 changed files with 5 additions and 8 deletions

View File

@ -83,6 +83,7 @@ public class HeadersFrame extends Frame
@Override
public String toString()
{
return String.format("%s#%d{end=%b}", super.toString(), streamId, endStream);
return String.format("%s#%d{end=%b}%s", super.toString(), streamId, endStream,
priority == null ? "" : String.format("+%s", priority));
}
}

View File

@ -92,17 +92,11 @@ public class HeadersBodyParser extends BodyParser
length = getBodyLength();
if (isPadding())
{
state = State.PADDING_LENGTH;
}
else if (hasFlag(Flags.PRIORITY))
{
state = State.EXCLUSIVE;
}
else
{
state = State.HEADERS;
}
break;
}
case PADDING_LENGTH:
@ -162,6 +156,9 @@ public class HeadersBodyParser extends BodyParser
}
case WEIGHT:
{
// SPEC: stream cannot depend on itself.
if (getStreamId() == parentStreamId)
return connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR.code, "invalid_priority_frame");
weight = (buffer.get() & 0xFF) + 1;
--length;
state = State.HEADERS;

View File

@ -102,7 +102,6 @@ public class PriorityBodyParser extends BodyParser
// SPEC: stream cannot depend on itself.
if (getStreamId() == parentStreamId)
return connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR.code, "invalid_priority_frame");
int weight = (buffer.get() & 0xFF) + 1;
return onPriority(parentStreamId, weight, exclusive);
}