aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/core/bad_client/tests
diff options
context:
space:
mode:
authorGravatar Nicolas Noble <nicolasnoble@users.noreply.github.com>2015-12-11 20:59:47 -0800
committerGravatar Nicolas Noble <nicolasnoble@users.noreply.github.com>2015-12-11 20:59:47 -0800
commit1e54d284cb07b0c5383b5fc7fa214d89c5d068cc (patch)
treeb5e332727b6c9450bf4c2d5a4bca14b0d60528cf /test/core/bad_client/tests
parent4b067d74f577251b2bf2d104b3229aa3ec2f4137 (diff)
parent04b0494169fb14b289280622a285c6fe7a34803b (diff)
Merge pull request #4420 from ctiller/slops
Hit a few more paths in http_server_filter.c, sockaddr_resolver.c
Diffstat (limited to 'test/core/bad_client/tests')
-rw-r--r--test/core/bad_client/tests/badreq.c129
-rw-r--r--test/core/bad_client/tests/badreq_2path.headers13
-rw-r--r--test/core/bad_client/tests/badreq_algorithm.headers11
-rw-r--r--test/core/bad_client/tests/badreq_content_type.headers11
-rw-r--r--test/core/bad_client/tests/badreq_encoding.headers12
-rw-r--r--test/core/bad_client/tests/badreq_te.headers11
6 files changed, 187 insertions, 0 deletions
diff --git a/test/core/bad_client/tests/badreq.c b/test/core/bad_client/tests/badreq.c
new file mode 100644
index 0000000000..bc6acd788f
--- /dev/null
+++ b/test/core/bad_client/tests/badreq.c
@@ -0,0 +1,129 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "test/core/bad_client/bad_client.h"
+
+#include <string.h>
+
+#include "test/core/end2end/cq_verifier.h"
+#include "src/core/surface/server.h"
+
+#define PFX_STR \
+ "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" \
+ "\x00\x00\x00\x04\x00\x00\x00\x00\x00" /* settings frame */
+
+static void verifier(grpc_server *server, grpc_completion_queue *cq) {
+ while (grpc_server_has_open_connections(server)) {
+ GPR_ASSERT(grpc_completion_queue_next(cq,
+ GRPC_TIMEOUT_MILLIS_TO_DEADLINE(20),
+ NULL).type == GRPC_QUEUE_TIMEOUT);
+ }
+}
+
+int main(int argc, char **argv) {
+ grpc_test_init(argc, argv);
+
+ /* invalid content type */
+ GRPC_RUN_BAD_CLIENT_TEST(verifier,
+ PFX_STR
+ "\x00\x00\xc2\x01\x04\x00\x00\x00\x01"
+ "\x10\x05:path\x08/foo/bar"
+ "\x10\x07:scheme\x04http"
+ "\x10\x07:method\x04POST"
+ "\x10\x0a:authority\x09localhost"
+ "\x10\x0c""content-type\x09text/html"
+ "\x10\x14grpc-accept-encoding\x15identity,deflate,gzip"
+ "\x10\x02te\x08trailers"
+ "\x10\x0auser-agent\"bad-client grpc-c/0.12.0.0 (linux)",
+ GRPC_BAD_CLIENT_DISCONNECT);
+
+ /* invalid te */
+ GRPC_RUN_BAD_CLIENT_TEST(verifier,
+ PFX_STR
+ "\x00\x00\xcb\x01\x04\x00\x00\x00\x01"
+ "\x10\x05:path\x08/foo/bar"
+ "\x10\x07:scheme\x04http"
+ "\x10\x07:method\x04POST"
+ "\x10\x0a:authority\x09localhost"
+ "\x10\x0c""content-type\x10""application/grpc"
+ "\x10\x14grpc-accept-encoding\x15identity,deflate,gzip"
+ "\x10\x02te\x0a""frobnicate"
+ "\x10\x0auser-agent\"bad-client grpc-c/0.12.0.0 (linux)",
+ GRPC_BAD_CLIENT_DISCONNECT);
+
+ /* two path headers */
+ GRPC_RUN_BAD_CLIENT_TEST(verifier,
+ PFX_STR
+ "\x00\x00\xd9\x01\x04\x00\x00\x00\x01"
+ "\x10\x05:path\x08/foo/bar"
+ "\x10\x05:path\x08/foo/bah"
+ "\x10\x07:scheme\x04http"
+ "\x10\x07:method\x04POST"
+ "\x10\x0a:authority\x09localhost"
+ "\x10\x0c""content-type\x10""application/grpc"
+ "\x10\x14grpc-accept-encoding\x15identity,deflate,gzip"
+ "\x10\x02te\x08trailers"
+ "\x10\x0auser-agent\"bad-client grpc-c/0.12.0.0 (linux)",
+ GRPC_BAD_CLIENT_DISCONNECT);
+
+ /* bad accept-encoding algorithm */
+ GRPC_RUN_BAD_CLIENT_TEST(verifier,
+ PFX_STR
+ "\x00\x00\xd2\x01\x04\x00\x00\x00\x01"
+ "\x10\x05:path\x08/foo/bar"
+ "\x10\x07:scheme\x04http"
+ "\x10\x07:method\x04POST"
+ "\x10\x0a:authority\x09localhost"
+ "\x10\x0c""content-type\x10""application/grpc"
+ "\x10\x14grpc-accept-encoding\x1enobody-knows-the-trouble-i-see"
+ "\x10\x02te\x08trailers"
+ "\x10\x0auser-agent\"bad-client grpc-c/0.12.0.0 (linux)",
+ GRPC_BAD_CLIENT_DISCONNECT);
+
+ /* bad grpc-encoding algorithm */
+ GRPC_RUN_BAD_CLIENT_TEST(verifier,
+ PFX_STR
+ "\x00\x00\xf5\x01\x04\x00\x00\x00\x01"
+ "\x10\x05:path\x08/foo/bar"
+ "\x10\x07:scheme\x04http"
+ "\x10\x07:method\x04POST"
+ "\x10\x0a:authority\x09localhost"
+ "\x10\x0c""content-type\x10""application/grpc"
+ "\x10\x14grpc-accept-encoding\x15identity,deflate,gzip"
+ "\x10\x0dgrpc-encoding\x1cyou-dont-know-how-to-do-this"
+ "\x10\x02te\x08trailers"
+ "\x10\x0auser-agent\"bad-client grpc-c/0.12.0.0 (linux)",
+ GRPC_BAD_CLIENT_DISCONNECT);
+
+ return 0;
+}
diff --git a/test/core/bad_client/tests/badreq_2path.headers b/test/core/bad_client/tests/badreq_2path.headers
new file mode 100644
index 0000000000..0441e50c8c
--- /dev/null
+++ b/test/core/bad_client/tests/badreq_2path.headers
@@ -0,0 +1,13 @@
+# headers used in badreq.c
+# use tools/codegen/core/gen_header_frame.py to generate the binary strings
+# contained in the source code
+:path: /foo/bar
+:path: /foo/bah
+:scheme: http
+:method: POST
+:authority: localhost
+content-type: application/grpc
+grpc-accept-encoding: identity,deflate,gzip
+te: trailers
+user-agent: bad-client grpc-c/0.12.0.0 (linux)
+
diff --git a/test/core/bad_client/tests/badreq_algorithm.headers b/test/core/bad_client/tests/badreq_algorithm.headers
new file mode 100644
index 0000000000..ff3e613f93
--- /dev/null
+++ b/test/core/bad_client/tests/badreq_algorithm.headers
@@ -0,0 +1,11 @@
+# headers used in badreq.c
+# use tools/codegen/core/gen_header_frame.py to generate the binary strings
+# contained in the source code
+:path: /foo/bar
+:scheme: http
+:method: POST
+:authority: localhost
+content-type: application/grpc
+grpc-accept-encoding: nobody-knows-the-trouble-i-see
+te: trailers
+user-agent: bad-client grpc-c/0.12.0.0 (linux)
diff --git a/test/core/bad_client/tests/badreq_content_type.headers b/test/core/bad_client/tests/badreq_content_type.headers
new file mode 100644
index 0000000000..ed8d798f19
--- /dev/null
+++ b/test/core/bad_client/tests/badreq_content_type.headers
@@ -0,0 +1,11 @@
+# headers used in badreq.c
+# use tools/codegen/core/gen_header_frame.py to generate the binary strings
+# contained in the source code
+:path: /foo/bar
+:scheme: http
+:method: POST
+:authority: localhost
+content-type: text/html
+grpc-accept-encoding: identity,deflate,gzip
+te: trailers
+user-agent: bad-client grpc-c/0.12.0.0 (linux)
diff --git a/test/core/bad_client/tests/badreq_encoding.headers b/test/core/bad_client/tests/badreq_encoding.headers
new file mode 100644
index 0000000000..5639c1fd71
--- /dev/null
+++ b/test/core/bad_client/tests/badreq_encoding.headers
@@ -0,0 +1,12 @@
+# headers used in badreq.c
+# use tools/codegen/core/gen_header_frame.py to generate the binary strings
+# contained in the source code
+:path: /foo/bar
+:scheme: http
+:method: POST
+:authority: localhost
+content-type: application/grpc
+grpc-accept-encoding: identity,deflate,gzip
+grpc-encoding: you-dont-know-how-to-do-this
+te: trailers
+user-agent: bad-client grpc-c/0.12.0.0 (linux)
diff --git a/test/core/bad_client/tests/badreq_te.headers b/test/core/bad_client/tests/badreq_te.headers
new file mode 100644
index 0000000000..012810e77d
--- /dev/null
+++ b/test/core/bad_client/tests/badreq_te.headers
@@ -0,0 +1,11 @@
+# headers used in badreq.c
+# use tools/codegen/core/gen_header_frame.py to generate the binary strings
+# contained in the source code
+:path: /foo/bar
+:scheme: http
+:method: POST
+:authority: localhost
+content-type: application/grpc
+grpc-accept-encoding: identity,deflate,gzip
+te: frobnicate
+user-agent: bad-client grpc-c/0.12.0.0 (linux)