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 @Override
public String toString() 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(); length = getBodyLength();
if (isPadding()) if (isPadding())
{
state = State.PADDING_LENGTH; state = State.PADDING_LENGTH;
}
else if (hasFlag(Flags.PRIORITY)) else if (hasFlag(Flags.PRIORITY))
{
state = State.EXCLUSIVE; state = State.EXCLUSIVE;
}
else else
{
state = State.HEADERS; state = State.HEADERS;
}
break; break;
} }
case PADDING_LENGTH: case PADDING_LENGTH:
@ -162,6 +156,9 @@ public class HeadersBodyParser extends BodyParser
} }
case WEIGHT: 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; weight = (buffer.get() & 0xFF) + 1;
--length; --length;
state = State.HEADERS; state = State.HEADERS;

View File

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