Skip to content

Commit 75837fc

Browse files
committed
C++: Add tests with missing flow.
1 parent 53db3bd commit 75837fc

5 files changed

Lines changed: 98 additions & 25 deletions

File tree

‎cpp/ql/test/library-tests/dataflow/external-models/asio_streams.cpp‎

Lines changed: 76 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ namespace std {
1818
};
1919

2020
typedef basic_string<char> string;
21+
22+
class string_view {
23+
public:
24+
string_view(const char* s);
25+
};
2126
};
2227

2328
namespace boost {
@@ -29,14 +34,50 @@ namespace boost {
2934
};
3035

3136
namespace asio {
32-
template<typename Protocol/*, typename Executor*/>
33-
class basic_stream_socket /*: public basic_socket<Protocol, Executor>*/ {
34-
};
37+
class any_io_executor { };
38+
39+
class socket_base { };
40+
41+
template <typename Protocol, typename Executor>
42+
class basic_socket : public socket_base { };
43+
44+
template<typename Protocol, typename Executor = any_io_executor>
45+
class basic_stream_socket : public basic_socket<Protocol, Executor> { };
3546

3647
namespace ip {
48+
class resolver_base {
49+
public:
50+
enum flags { passive = 1 };
51+
};
52+
53+
template<typename InternetProtocol, typename Executor = any_io_executor>
54+
class basic_resolver {
55+
public:
56+
class results_type {
57+
};
58+
59+
results_type resolve(const std::string &host, const std::string &service);
60+
results_type resolve(const std::string &host, const std::string &service, boost::system::error_code &ec);
61+
results_type resolve(const std::string &host, const std::string &service, resolver_base::flags resolve_flags);
62+
results_type resolve(const std::string &host, const std::string &service, resolver_base::flags resolve_flags, boost::system::error_code &ec);
63+
results_type resolve(std::string_view host, std::string_view service);
64+
results_type resolve(std::string_view host, std::string_view service, boost::system::error_code &ec);
65+
results_type resolve(std::string_view host, std::string_view service, resolver_base::flags resolve_flags);
66+
results_type resolve(std::string_view host, std::string_view service, resolver_base::flags resolve_flags, boost::system::error_code &ec);
67+
results_type resolve(const InternetProtocol &protocol, const std::string &host, const std::string &service);
68+
results_type resolve(const InternetProtocol &protocol, const std::string &host, const std::string &service, boost::system::error_code &ec);
69+
results_type resolve(const InternetProtocol &protocol, const std::string &host, const std::string &service, resolver_base::flags resolve_flags);
70+
results_type resolve(const InternetProtocol &protocol, const std::string &host, const std::string &service, resolver_base::flags resolve_flags, boost::system::error_code &ec);
71+
results_type resolve(const InternetProtocol &protocol, std::string_view host, std::string_view service);
72+
results_type resolve(const InternetProtocol &protocol, std::string_view host, std::string_view service, boost::system::error_code &ec);
73+
results_type resolve(const InternetProtocol &protocol, std::string_view host, std::string_view service, resolver_base::flags resolve_flags);
74+
results_type resolve(const InternetProtocol &protocol, std::string_view host, std::string_view service, resolver_base::flags resolve_flags, boost::system::error_code &ec);
75+
};
76+
3777
class tcp {
3878
public:
3979
typedef basic_stream_socket<tcp> socket;
80+
typedef basic_resolver<tcp> resolver;
4081
};
4182
};
4283

@@ -76,6 +117,7 @@ void sink(char *);
76117
void sink(std::string);
77118
void sink(boost::asio::streambuf);
78119
void sink(boost::asio::mutable_buffer);
120+
void sink(boost::asio::ip::tcp::resolver::results_type);
79121

80122
char *getenv(const char *name);
81123
int send(int, const void*, int, int);
@@ -105,3 +147,34 @@ void test(boost::asio::ip::tcp::socket &socket) {
105147
// ...
106148
}
107149
}
150+
151+
void test_resolve() {
152+
boost::asio::ip::tcp::resolver resolver;
153+
boost::asio::ip::tcp protocol;
154+
boost::asio::ip::resolver_base::flags flags = boost::asio::ip::resolver_base::passive;
155+
boost::system::error_code error;
156+
std::string host(source());
157+
std::string service("");
158+
std::string_view host_view(source());
159+
std::string_view service_view("");
160+
161+
sink(resolver.resolve(host, service)); // $ MISSING: ir
162+
sink(resolver.resolve(host, service, error)); // $ MISSING: ir
163+
sink(resolver.resolve(host, service, flags)); // $ MISSING: ir
164+
sink(resolver.resolve(host, service, flags, error)); // $ MISSING: ir
165+
166+
sink(resolver.resolve(host_view, service_view)); // $ MISSING: ir
167+
sink(resolver.resolve(host_view, service_view, error)); // $ MISSING: ir
168+
sink(resolver.resolve(host_view, service_view, flags)); // $ MISSING: ir
169+
sink(resolver.resolve(host_view, service_view, flags, error)); // $ MISSING: ir
170+
171+
sink(resolver.resolve(protocol, host, service)); // $ MISSING: ir
172+
sink(resolver.resolve(protocol, host, service, error)); // $ MISSING: ir
173+
sink(resolver.resolve(protocol, host, service, flags)); // $ MISSING: ir
174+
sink(resolver.resolve(protocol, host, service, flags, error)); // $ MISSING: ir
175+
176+
sink(resolver.resolve(protocol, host_view, service_view)); // $ MISSING: ir
177+
sink(resolver.resolve(protocol, host_view, service_view, error)); // $ MISSING: ir
178+
sink(resolver.resolve(protocol, host_view, service_view, flags)); // $ MISSING: ir
179+
sink(resolver.resolve(protocol, host_view, service_view, flags, error)); // $ MISSING: ir
180+
}

‎cpp/ql/test/library-tests/dataflow/external-models/flow.expected‎

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,14 @@ models
104104
| 103 | Summary: BloombergLP::bdlbb; BlobUtil; true; getContiguousRangeOrCopy; ; ; Argument[*1]; ReturnValue[*]; taint; manual |
105105
| 104 | Summary: boost::asio; ; false; buffer; ; ; Argument[*0]; ReturnValue; taint; manual |
106106
edges
107-
| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:91:7:91:17 | recv_buffer | provenance | Src:MaD:56 |
108-
| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:93:29:93:39 | recv_buffer | provenance | Src:MaD:56 Sink:MaD:4 |
109-
| asio_streams.cpp:97:37:97:44 | call to source | asio_streams.cpp:98:7:98:14 | send_str | provenance | TaintFunction |
110-
| asio_streams.cpp:97:37:97:44 | call to source | asio_streams.cpp:100:64:100:71 | *send_str | provenance | TaintFunction |
111-
| asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | |
112-
| asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:101:7:101:17 | send_buffer | provenance | |
113-
| asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:103:29:103:39 | send_buffer | provenance | Sink:MaD:4 |
114-
| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | MaD:104 |
107+
| asio_streams.cpp:129:34:129:44 | read_until output argument | asio_streams.cpp:133:7:133:17 | recv_buffer | provenance | Src:MaD:56 |
108+
| asio_streams.cpp:129:34:129:44 | read_until output argument | asio_streams.cpp:135:29:135:39 | recv_buffer | provenance | Src:MaD:56 Sink:MaD:4 |
109+
| asio_streams.cpp:139:37:139:44 | call to source | asio_streams.cpp:140:7:140:14 | send_str | provenance | TaintFunction |
110+
| asio_streams.cpp:139:37:139:44 | call to source | asio_streams.cpp:142:64:142:71 | *send_str | provenance | TaintFunction |
111+
| asio_streams.cpp:142:44:142:62 | call to buffer | asio_streams.cpp:142:44:142:62 | call to buffer | provenance | |
112+
| asio_streams.cpp:142:44:142:62 | call to buffer | asio_streams.cpp:143:7:143:17 | send_buffer | provenance | |
113+
| asio_streams.cpp:142:44:142:62 | call to buffer | asio_streams.cpp:145:29:145:39 | send_buffer | provenance | Sink:MaD:4 |
114+
| asio_streams.cpp:142:64:142:71 | *send_str | asio_streams.cpp:142:44:142:62 | call to buffer | provenance | MaD:104 |
115115
| azure.cpp:253:48:253:60 | *call to GetBodyStream | azure.cpp:257:5:257:8 | *resp | provenance | |
116116
| azure.cpp:253:48:253:60 | *call to GetBodyStream | azure.cpp:262:5:262:8 | *resp | provenance | |
117117
| azure.cpp:253:48:253:60 | *call to GetBodyStream | azure.cpp:266:38:266:41 | *resp | provenance | |
@@ -526,16 +526,16 @@ edges
526526
| windows.cpp:1172:21:1172:24 | *guid | windows.cpp:1172:27:1172:29 | StringFromGUID2 output argument | provenance | MaD:76 |
527527
| windows.cpp:1172:27:1172:29 | StringFromGUID2 output argument | windows.cpp:1174:10:1174:13 | * ... | provenance | |
528528
nodes
529-
| asio_streams.cpp:87:34:87:44 | read_until output argument | semmle.label | read_until output argument |
530-
| asio_streams.cpp:91:7:91:17 | recv_buffer | semmle.label | recv_buffer |
531-
| asio_streams.cpp:93:29:93:39 | recv_buffer | semmle.label | recv_buffer |
532-
| asio_streams.cpp:97:37:97:44 | call to source | semmle.label | call to source |
533-
| asio_streams.cpp:98:7:98:14 | send_str | semmle.label | send_str |
534-
| asio_streams.cpp:100:44:100:62 | call to buffer | semmle.label | call to buffer |
535-
| asio_streams.cpp:100:44:100:62 | call to buffer | semmle.label | call to buffer |
536-
| asio_streams.cpp:100:64:100:71 | *send_str | semmle.label | *send_str |
537-
| asio_streams.cpp:101:7:101:17 | send_buffer | semmle.label | send_buffer |
538-
| asio_streams.cpp:103:29:103:39 | send_buffer | semmle.label | send_buffer |
529+
| asio_streams.cpp:129:34:129:44 | read_until output argument | semmle.label | read_until output argument |
530+
| asio_streams.cpp:133:7:133:17 | recv_buffer | semmle.label | recv_buffer |
531+
| asio_streams.cpp:135:29:135:39 | recv_buffer | semmle.label | recv_buffer |
532+
| asio_streams.cpp:139:37:139:44 | call to source | semmle.label | call to source |
533+
| asio_streams.cpp:140:7:140:14 | send_str | semmle.label | send_str |
534+
| asio_streams.cpp:142:44:142:62 | call to buffer | semmle.label | call to buffer |
535+
| asio_streams.cpp:142:44:142:62 | call to buffer | semmle.label | call to buffer |
536+
| asio_streams.cpp:142:64:142:71 | *send_str | semmle.label | *send_str |
537+
| asio_streams.cpp:143:7:143:17 | send_buffer | semmle.label | send_buffer |
538+
| asio_streams.cpp:145:29:145:39 | send_buffer | semmle.label | send_buffer |
539539
| azure.cpp:253:48:253:60 | *call to GetBodyStream | semmle.label | *call to GetBodyStream |
540540
| azure.cpp:253:48:253:60 | call to GetBodyStream | semmle.label | call to GetBodyStream |
541541
| azure.cpp:257:5:257:8 | *resp | semmle.label | *resp |

‎cpp/ql/test/library-tests/dataflow/external-models/sinks.expected‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
| asio_streams.cpp:93:29:93:39 | recv_buffer | remote-sink |
2-
| asio_streams.cpp:103:29:103:39 | send_buffer | remote-sink |
1+
| asio_streams.cpp:135:29:135:39 | recv_buffer | remote-sink |
2+
| asio_streams.cpp:145:29:145:39 | send_buffer | remote-sink |
33
| test.cpp:12:10:12:10 | 0 | test-sink |
44
| test.cpp:14:10:14:10 | x | test-sink |
55
| test.cpp:18:10:18:10 | y | test-sink |

‎cpp/ql/test/library-tests/dataflow/external-models/sources.expected‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
| asio_streams.cpp:87:34:87:44 | read_until output argument | remote |
1+
| asio_streams.cpp:129:34:129:44 | read_until output argument | remote |
22
| azure.cpp:253:48:253:60 | call to GetBodyStream | remote |
33
| azure.cpp:273:52:273:61 | call to GetHeaders | remote |
44
| azure.cpp:277:38:277:44 | call to GetBody | remote |

‎cpp/ql/test/library-tests/dataflow/external-models/steps.expected‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer |
1+
| asio_streams.cpp:142:64:142:71 | *send_str | asio_streams.cpp:142:44:142:62 | call to buffer |
22
| azure.cpp:252:79:252:98 | call to string | azure.cpp:252:62:252:99 | call to Url |
33
| azure.cpp:257:5:257:8 | *resp | azure.cpp:257:16:257:21 | Read output argument |
44
| azure.cpp:262:5:262:8 | *resp | azure.cpp:262:23:262:28 | ReadToCount output argument |

0 commit comments

Comments
 (0)