|
@@ -33,10 +33,11 @@
|
|
|
|
|
|
#include "test/core/bad_client/bad_client.h"
|
|
|
|
|
|
-#include <stdio.h>
|
|
|
#include <string.h>
|
|
|
|
|
|
#include <grpc/support/alloc.h>
|
|
|
+#include <grpc/support/string_util.h>
|
|
|
+#include "src/core/lib/support/string.h"
|
|
|
#include "src/core/lib/surface/server.h"
|
|
|
#include "test/core/end2end/cq_verifier.h"
|
|
|
|
|
@@ -64,23 +65,22 @@
|
|
|
|
|
|
// Each large-metadata header is constructed from these start and end
|
|
|
// strings, with a two-digit number in between.
|
|
|
-#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR \
|
|
|
- "\x10\x0duser-header"
|
|
|
+#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR "\x10\x0duser-header"
|
|
|
#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR \
|
|
|
"~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
|
|
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
|
|
|
|
// The size of each large-metadata header string.
|
|
|
-#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_SIZE \
|
|
|
+#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_SIZE \
|
|
|
((sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR) - 1) + 2 + \
|
|
|
(sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR) - 1))
|
|
|
|
|
|
// The number of headers we're adding and the total size of the client
|
|
|
// payload.
|
|
|
#define NUM_HEADERS 95
|
|
|
-#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_PAYLOAD_SIZE \
|
|
|
- ((sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR) - 1) \
|
|
|
- + (NUM_HEADERS * PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_SIZE) + 1)
|
|
|
+#define PFX_TOO_MUCH_METADATA_FROM_CLIENT_PAYLOAD_SIZE \
|
|
|
+ ((sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR) - 1) + \
|
|
|
+ (NUM_HEADERS * PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_SIZE) + 1)
|
|
|
|
|
|
#define PFX_TOO_MUCH_METADATA_FROM_SERVER_STR \
|
|
|
"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" /* settings frame: sets \
|
|
@@ -217,19 +217,26 @@ int main(int argc, char **argv) {
|
|
|
grpc_test_init(argc, argv);
|
|
|
|
|
|
// Test sending more metadata than the server will accept.
|
|
|
- char client_payload[PFX_TOO_MUCH_METADATA_FROM_CLIENT_PAYLOAD_SIZE] =
|
|
|
- PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR;
|
|
|
- size_t offset = sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR);
|
|
|
+ gpr_strvec headers;
|
|
|
+ gpr_strvec_init(&headers);
|
|
|
for (int i = 0; i < NUM_HEADERS; ++i) {
|
|
|
- snprintf(client_payload + offset,
|
|
|
- PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_SIZE,
|
|
|
- "%s%02d%s",
|
|
|
- PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR, i,
|
|
|
- PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR);
|
|
|
- offset += PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_SIZE;
|
|
|
+ char *str;
|
|
|
+ gpr_asprintf(&str, "%s%02d%s",
|
|
|
+ PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_START_STR, i,
|
|
|
+ PFX_TOO_MUCH_METADATA_FROM_CLIENT_HEADER_END_STR);
|
|
|
+ gpr_strvec_add(&headers, str);
|
|
|
}
|
|
|
- GRPC_RUN_BAD_CLIENT_TEST(server_verifier, client_validator,
|
|
|
- client_payload, 0);
|
|
|
+ size_t headers_len;
|
|
|
+ const char *client_headers = gpr_strvec_flatten(&headers, &headers_len);
|
|
|
+ gpr_strvec_destroy(&headers);
|
|
|
+ char client_payload[PFX_TOO_MUCH_METADATA_FROM_CLIENT_PAYLOAD_SIZE] =
|
|
|
+ PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR;
|
|
|
+ memcpy(
|
|
|
+ client_payload + sizeof(PFX_TOO_MUCH_METADATA_FROM_CLIENT_PREFIX_STR) - 1,
|
|
|
+ client_headers, headers_len);
|
|
|
+ GRPC_RUN_BAD_CLIENT_TEST(server_verifier, client_validator, client_payload,
|
|
|
+ 0);
|
|
|
+ gpr_free((void *)client_headers);
|
|
|
|
|
|
// Test sending more metadata than the client will accept.
|
|
|
GRPC_RUN_BAD_CLIENT_TEST(server_verifier_sends_too_much_metadata,
|