Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(198)

Side by Side Diff: net/socket/fuzzed_socket_factory.cc

Issue 1917503002: URLRequest fuzzer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fuzz
Patch Set: Add missing include Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/socket/fuzzed_socket_factory.h"
6
7 #include "base/logging.h"
8 #include "base/memory/ptr_util.h"
9 #include "net/base/address_list.h"
10 #include "net/base/ip_endpoint.h"
11 #include "net/base/net_errors.h"
12 #include "net/base/network_change_notifier.h"
13 #include "net/log/net_log.h"
14 #include "net/socket/client_socket_handle.h"
15 #include "net/socket/connection_attempts.h"
16 #include "net/socket/fuzzed_socket.h"
17 #include "net/socket/ssl_client_socket.h"
18 #include "net/ssl/ssl_failure_state.h"
19 #include "net/udp/datagram_client_socket.h"
20
21 namespace net {
22
23 namespace {
24
25 // Datagram ClientSocket implementation that always failed to connect.
26 class FailingUDPClientSocket : public DatagramClientSocket {
27 public:
28 FailingUDPClientSocket() {}
29 ~FailingUDPClientSocket() override {}
30
31 // DatagramClientSocket implementation:
32 int Connect(const IPEndPoint& address) override { return ERR_FAILED; }
33
34 int ConnectUsingNetwork(NetworkChangeNotifier::NetworkHandle network,
35 const IPEndPoint& address) override {
36 return ERR_FAILED;
37 }
38
39 int ConnectUsingDefaultNetwork(const IPEndPoint& address) override {
40 return ERR_FAILED;
41 }
42
43 NetworkChangeNotifier::NetworkHandle GetBoundNetwork() const override {
44 return -1;
45 }
46
47 // DatagramSocket implementation:
48 void Close() override {}
49
50 int GetPeerAddress(IPEndPoint* address) const override {
51 return ERR_SOCKET_NOT_CONNECTED;
52 }
53
54 int GetLocalAddress(IPEndPoint* address) const override {
55 return ERR_SOCKET_NOT_CONNECTED;
56 }
57
58 const BoundNetLog& NetLog() const override { return net_log_; }
59
60 // Socket implementation:
61 int Read(IOBuffer* buf,
62 int buf_len,
63 const CompletionCallback& callback) override {
64 NOTREACHED();
65 return ERR_UNEXPECTED;
66 }
67
68 int Write(IOBuffer* buf,
69 int buf_len,
70 const CompletionCallback& callback) override {
71 NOTREACHED();
72 return ERR_UNEXPECTED;
73 }
74
75 int SetReceiveBufferSize(int32_t size) override {
76 NOTREACHED();
77 return ERR_UNEXPECTED;
78 }
79
80 int SetSendBufferSize(int32_t size) override {
81 NOTREACHED();
82 return ERR_UNEXPECTED;
83 }
84
85 BoundNetLog net_log_;
86
87 DISALLOW_COPY_AND_ASSIGN(FailingUDPClientSocket);
88 };
89
90 // SSLClientSocket implementation that always fails to connect.
91 class FailingSSLClientSocket : public SSLClientSocket {
92 public:
93 FailingSSLClientSocket() {}
94 ~FailingSSLClientSocket() override {}
95
96 // Socket implementation:
97 int Read(IOBuffer* buf,
98 int buf_len,
99 const CompletionCallback& callback) override {
100 NOTREACHED();
101 return ERR_UNEXPECTED;
102 }
103
104 int Write(IOBuffer* buf,
105 int buf_len,
106 const CompletionCallback& callback) override {
107 NOTREACHED();
108 return ERR_UNEXPECTED;
109 }
110
111 int SetReceiveBufferSize(int32_t size) override { return OK; }
112 int SetSendBufferSize(int32_t size) override { return OK; }
113
114 // StreamSocket implementation:
115 int Connect(const CompletionCallback& callback) override {
116 return ERR_FAILED;
117 }
118
119 void Disconnect() override {}
120 bool IsConnected() const override { return false; }
121 bool IsConnectedAndIdle() const override { return false; }
122
123 int GetPeerAddress(IPEndPoint* address) const override {
124 return ERR_SOCKET_NOT_CONNECTED;
125 }
126 int GetLocalAddress(IPEndPoint* address) const override {
127 return ERR_SOCKET_NOT_CONNECTED;
128 }
129
130 const BoundNetLog& NetLog() const override { return net_log_; }
131
132 void SetSubresourceSpeculation() override {}
133 void SetOmniboxSpeculation() override {}
134
135 bool WasEverUsed() const override { return false; }
136
137 void EnableTCPFastOpenIfSupported() override {}
138
139 bool WasNpnNegotiated() const override { return false; }
140
141 NextProto GetNegotiatedProtocol() const override { return kProtoUnknown; }
142
143 bool GetSSLInfo(SSLInfo* ssl_info) override { return false; }
144
145 void GetConnectionAttempts(ConnectionAttempts* out) const override {
146 out->clear();
147 }
148
149 void ClearConnectionAttempts() override {}
150
151 void AddConnectionAttempts(const ConnectionAttempts& attempts) override {}
152
153 int64_t GetTotalReceivedBytes() const override { return 0; }
154
155 // SSLSocket implementation:
156 int ExportKeyingMaterial(const base::StringPiece& label,
157 bool has_context,
158 const base::StringPiece& context,
159 unsigned char* out,
160 unsigned int outlen) override {
161 NOTREACHED();
162 return 0;
163 }
164
165 // SSLClientSocket implementation:
166 void GetSSLCertRequestInfo(SSLCertRequestInfo* cert_request_info) override {}
167
168 NextProtoStatus GetNextProto(std::string* proto) const override {
169 return NextProtoStatus::kNextProtoUnsupported;
170 }
171
172 ChannelIDService* GetChannelIDService() const override {
173 NOTREACHED();
174 return nullptr;
175 }
176
177 Error GetSignedEKMForTokenBinding(crypto::ECPrivateKey* key,
178 std::vector<uint8_t>* out) override {
179 NOTREACHED();
180 return ERR_UNEXPECTED;
181 }
182
183 crypto::ECPrivateKey* GetChannelIDKey() const override {
184 NOTREACHED();
185 return nullptr;
186 }
187
188 SSLFailureState GetSSLFailureState() const override {
189 return SSL_FAILURE_UNKNOWN;
190 }
191
192 private:
193 BoundNetLog net_log_;
194
195 DISALLOW_COPY_AND_ASSIGN(FailingSSLClientSocket);
196 };
197
198 } // namespace
199
200 FuzzedSocketFactory::FuzzedSocketFactory(FuzzedDataProvider* data_provider)
201 : data_provider_(data_provider) {}
202
203 FuzzedSocketFactory::~FuzzedSocketFactory() {}
204
205 std::unique_ptr<DatagramClientSocket>
206 FuzzedSocketFactory::CreateDatagramClientSocket(
207 DatagramSocket::BindType bind_type,
208 const RandIntCallback& rand_int_cb,
209 NetLog* net_log,
210 const NetLog::Source& source) {
211 return base::WrapUnique(new FailingUDPClientSocket());
212 }
213
214 std::unique_ptr<StreamSocket> FuzzedSocketFactory::CreateTransportClientSocket(
215 const AddressList& addresses,
216 std::unique_ptr<SocketPerformanceWatcher> socket_performance_watcher,
217 NetLog* net_log,
218 const NetLog::Source& source) {
219 std::unique_ptr<FuzzedSocket> socket(
220 new FuzzedSocket(data_provider_, net_log));
221 socket->set_fuzz_connect_result(true);
222 // Just use the first address.
223 socket->set_remote_address(*addresses.begin());
224 return std::move(socket);
225 }
226
227 std::unique_ptr<SSLClientSocket> FuzzedSocketFactory::CreateSSLClientSocket(
228 std::unique_ptr<ClientSocketHandle> transport_socket,
229 const HostPortPair& host_and_port,
230 const SSLConfig& ssl_config,
231 const SSLClientSocketContext& context) {
232 return base::WrapUnique(new FailingSSLClientSocket());
233 }
234
235 void FuzzedSocketFactory::ClearSSLSessionCache() {}
236
237 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698