|
|
|
@ -66,194 +66,236 @@ int main(int argc, char **argv) { |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
|
|
|
|
|
/* test adding prioritization data */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x01\x01\x24\x00\x00\x00\x01" |
|
|
|
|
"\x00", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x02\x01\x24\x00\x00\x00\x01" |
|
|
|
|
"\x00\x00", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x03\x01\x24\x00\x00\x00\x01" |
|
|
|
|
"\x00\x00\x00", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x04\x01\x24\x00\x00\x00\x01" |
|
|
|
|
"\x00\x00\x00\x00", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x05\x01\x24\x00\x00\x00\x01" |
|
|
|
|
"", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x05\x01\x24\x00\x00\x00\x01" |
|
|
|
|
"\x00", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x05\x01\x24\x00\x00\x00\x01" |
|
|
|
|
"\x00\x00", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x05\x01\x24\x00\x00\x00\x01" |
|
|
|
|
"\x00\x00\x00", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x05\x01\x24\x00\x00\x00\x01" |
|
|
|
|
"\x00\x00\x00\x00", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x05\x01\x24\x00\x00\x00\x01" |
|
|
|
|
"\x00\x00\x00\x00\x00", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
|
|
|
|
|
/* test looking up an invalid index */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x01\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xfe", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x04\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x7f\x7f\x01" |
|
|
|
|
"a", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x04\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x0f\x7f\x01" |
|
|
|
|
"a", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x04\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x1f\x7f\x01" |
|
|
|
|
"a", |
|
|
|
|
0); |
|
|
|
|
/* test nvr, not indexed in static table */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x03\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x01\x01" |
|
|
|
|
"a", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x03\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x11\x01" |
|
|
|
|
"a", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
/* illegal op code */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x01\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x80", |
|
|
|
|
0); |
|
|
|
|
/* parse some long indices */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x02\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x00", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x03\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x00", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x04\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x80\x00", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x05\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x80\x80\x00", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x06\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x80\x80\x80\x00", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x07\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x80\x80\x80\x80\x00", |
|
|
|
|
0); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x08\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x08\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x08\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x80", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x08\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x80\x80", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x08\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x80\x80\x80", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x08\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x80\x80\x80\x80", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x08\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x80\x80\x80\x80\x80", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x08\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x80\x80\x80\x80\x80\x00", |
|
|
|
|
0); |
|
|
|
|
/* overflow on byte 4 */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x06\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x80\x80\x80\x7f", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x06\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\xff\xff\xff\xff\x0f", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
/* overflow after byte 4 */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x08\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\xff\x80\x80\x80\x80\x80\x80\x02", |
|
|
|
|
0); |
|
|
|
|
/* end of headers mid-opcode */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x01\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x01", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
|
|
|
|
|
/* dynamic table size update: set to default */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x03\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x3f\xe1\x1f", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
/* dynamic table size update: set too large */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x03\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x3f\xf1\x1f", |
|
|
|
|
0); |
|
|
|
|
/* dynamic table size update: set twice */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x04\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x20\x3f\xe1\x1f", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
/* dynamic table size update: set thrice */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x03\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x20\x20\x20", |
|
|
|
|
0); |
|
|
|
|
|
|
|
|
|
/* non-ending header followed by continuation frame */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x00\x01\x00\x00\x00\x00\x01" |
|
|
|
|
"\x00\x00\x00\x09\x04\x00\x00\x00\x01", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
/* non-ending header followed by non-continuation frame */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x00\x01\x00\x00\x00\x00\x01" |
|
|
|
|
"\x00\x00\x00\x00\x04\x00\x00\x00\x01", |
|
|
|
|
0); |
|
|
|
|
/* non-ending header followed by a continuation frame for a different stream
|
|
|
|
|
*/ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x00\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x00\x00\x00\x01\x00\x00\x00\x00\x03" |
|
|
|
|
"\x00\x00\x00\x09\x04\x00\x00\x00\x01", |
|
|
|
@ -262,7 +304,8 @@ int main(int argc, char **argv) { |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR "\x00\x00\x00\x09\x04\x00\x00\x00\x01", 0); |
|
|
|
|
/* three header frames */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x00\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x00\x00\x00\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x00\x00\x00\x01\x04\x00\x00\x00\x01", |
|
|
|
@ -274,13 +317,15 @@ int main(int argc, char **argv) { |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
|
|
|
|
|
/* a badly encoded timeout value */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x19\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x10\x0cgrpc-timeout\x0a" |
|
|
|
|
"15 seconds", |
|
|
|
|
GRPC_BAD_CLIENT_DISCONNECT); |
|
|
|
|
/* a badly encoded timeout value: twice (catches caching) */ |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, PFX_STR |
|
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(verifier, NULL, |
|
|
|
|
PFX_STR |
|
|
|
|
"\x00\x00\x19\x01\x04\x00\x00\x00\x01" |
|
|
|
|
"\x10\x0cgrpc-timeout\x0a" |
|
|
|
|
"15 seconds" |
|
|
|
|