Skip to content

Commit a9635e6

Browse files
committed
More improvements around allocators
* Remove public constructors from owned_object, as these just duplicate ddwaf_object::make_* factory methods and may have confusing affects around some implicit conversions. * make borrowed objects destroy the current value when they're assigned to from an owned_object&&. This prevents some usages of to_borrowed(x), where x is uninitialized memory. * remove more implicit usages of the default allocator, causing runtime errors.
1 parent a734927 commit a9635e6

File tree

124 files changed

+1709
-1373
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

124 files changed

+1709
-1373
lines changed

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44
/Debug
55
/Release
66
/RelWithDebInfo
7+
/build

fuzzer/cmdi_detector/src/main.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,11 +188,15 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
188188

189189
auto [resource, param] = deserialize(bytes, size);
190190

191-
auto root = owned_object::make_map();
192-
root.emplace("server.request.query", owned_object::make_string(param));
193-
194-
auto array = root.emplace("server.sys.exec.cmd", owned_object::make_array());
195-
for (auto arg : resource) { array.emplace_back(owned_object::make_string(arg)); }
191+
auto root = owned_object::make_map(0, ddwaf::memory::get_default_resource());
192+
root.emplace("server.request.query",
193+
owned_object::make_string(param, ddwaf::memory::get_default_resource()));
194+
195+
auto array = root.emplace(
196+
"server.sys.exec.cmd", owned_object::make_array(0, ddwaf::memory::get_default_resource()));
197+
for (auto arg : resource) {
198+
array.emplace_back(owned_object::make_string(arg, ddwaf::memory::get_default_resource()));
199+
}
196200

197201
object_store store;
198202
store.insert(std::move(root));

fuzzer/http_endpoint_fingerprint/src/main.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
1717
{
1818
random_buffer buffer{bytes, size};
1919

20-
auto query = owned_object::make_map();
20+
auto query = owned_object::make_map(0, ddwaf::memory::get_default_resource());
2121
auto query_size = buffer.get<uint8_t>();
2222
for (uint8_t i = 0; i < query_size; ++i) {
2323
auto key = buffer.get<std::string_view>();
2424
auto value = buffer.get<std::string_view>();
2525
query.emplace(key, value);
2626
}
2727

28-
auto body = owned_object::make_map();
28+
auto body = owned_object::make_map(0, ddwaf::memory::get_default_resource());
2929
auto body_size = buffer.get<uint8_t>();
3030
for (uint8_t i = 0; i < body_size; ++i) {
3131
auto key = buffer.get<std::string_view>();
@@ -41,8 +41,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
4141
gen.eval_impl({.address = {}, .key_path = {}, .value = buffer.get<std::string_view>()},
4242
{.address = {}, .key_path = {}, .value = buffer.get<std::string_view>()},
4343
{{.address = {}, .key_path = {}, .value = query}},
44-
{{.address = {}, .key_path = {}, .value = body}}, cache, memory::get_default_resource(),
45-
deadline);
44+
{{.address = {}, .key_path = {}, .value = body}}, cache,
45+
ddwaf::memory::get_default_resource(), deadline);
4646

4747
return 0;
4848
}

fuzzer/http_header_fingerprint/src/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
2222

2323
random_buffer buffer{bytes, size};
2424

25-
auto header = owned_object::make_map();
25+
auto header = owned_object::make_map(0, ddwaf::memory::get_default_resource());
2626
auto header_size = buffer.get<uint8_t>();
2727
for (uint8_t i = 0; i < header_size; ++i) {
2828
auto value = buffer.get<std::string_view>();
@@ -41,7 +41,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
4141
processor_cache cache;
4242
ddwaf::timer deadline{2s};
4343
auto output = gen.eval_impl({.address = {}, .key_path = {}, .value = header}, cache,
44-
memory::get_default_resource(), deadline);
44+
ddwaf::memory::get_default_resource(), deadline);
4545

4646
return 0;
4747
}

fuzzer/http_network_fingerprint/src/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
2121

2222
random_buffer buffer{bytes, size};
2323

24-
auto header = owned_object::make_map();
24+
auto header = owned_object::make_map(0, ddwaf::memory::get_default_resource());
2525
auto header_size = buffer.get<uint8_t>();
2626
for (uint8_t i = 0; i < header_size; ++i) {
2727
auto value = buffer.get<std::string_view>();
@@ -40,7 +40,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
4040
processor_cache cache;
4141
ddwaf::timer deadline{2s};
4242
auto output = gen.eval_impl({.address = {}, .key_path = {}, .value = header}, cache,
43-
memory::get_default_resource(), deadline);
43+
ddwaf::memory::get_default_resource(), deadline);
4444

4545
return 0;
4646
}

fuzzer/jwt_decode/src/main.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
1818
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
1919
std::string_view value{reinterpret_cast<const char *>(bytes), size};
2020

21-
auto headers = object_builder::map({{"authorization", value}});
21+
auto headers =
22+
object_builder::map({{"authorization", value}}, ddwaf::memory::get_default_resource());
2223

2324
jwt_decode gen{"id", {}, {}, false, true};
2425

2526
processor_cache cache;
2627
ddwaf::timer deadline{2s};
2728
static const std::vector<std::variant<std::string, int64_t>> key_path{"authorization"};
2829
auto output = gen.eval_impl({.address = {}, .key_path = key_path, .value = headers}, cache,
29-
memory::get_default_resource(), deadline);
30+
ddwaf::memory::get_default_resource(), deadline);
3031

3132
return 0;
3233
}

fuzzer/lfi_detector/src/main.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,11 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
111111
lfi_detector cond{{gen_param_def("server.io.fs.file", "server.request.query")}};
112112

113113
auto [resource, param] = deserialize(bytes, size);
114-
auto root = owned_object::make_map();
115-
root.emplace("server.request.query", owned_object::make_string(param));
116-
root.emplace("server.io.fs.file", owned_object::make_string(resource));
114+
auto root = owned_object::make_map(0, ddwaf::memory::get_default_resource());
115+
root.emplace("server.request.query",
116+
owned_object::make_string(param, ddwaf::memory::get_default_resource()));
117+
root.emplace("server.io.fs.file",
118+
owned_object::make_string(resource, ddwaf::memory::get_default_resource()));
117119

118120
object_store store;
119121
store.insert(std::move(root));

fuzzer/session_fingerprint/src/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
1717
{
1818
random_buffer buffer{bytes, size};
1919

20-
auto cookies = owned_object::make_map();
20+
auto cookies = owned_object::make_map(0, ddwaf::memory::get_default_resource());
2121
auto cookies_size = buffer.get<uint8_t>();
2222
for (uint8_t i = 0; i < cookies_size; ++i) {
2323
auto key = buffer.get<std::string_view>();
@@ -34,7 +34,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
3434
auto output = gen.eval_impl({{.address = {}, .key_path = {}, .value = cookies}},
3535
{{.address = {}, .key_path = {}, .value = buffer.get<std::string_view>()}},
3636
{{.address = {}, .key_path = {}, .value = buffer.get<std::string_view>()}}, cache,
37-
memory::get_default_resource(), deadline);
37+
ddwaf::memory::get_default_resource(), deadline);
3838

3939
return 0;
4040
}

fuzzer/shi_detector_array/src/main.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,11 +188,15 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
188188

189189
auto [resource, param] = deserialize(bytes, size);
190190

191-
auto root = owned_object::make_map();
192-
root.emplace("server.request.query", owned_object::make_string(param));
193-
194-
auto array = root.emplace("server.sys.shell.cmd", owned_object::make_array());
195-
for (auto arg : resource) { array.emplace_back(owned_object::make_string(arg)); }
191+
auto root = owned_object::make_map(0, ddwaf::memory::get_default_resource());
192+
root.emplace("server.request.query",
193+
owned_object::make_string(param, ddwaf::memory::get_default_resource()));
194+
195+
auto array = root.emplace(
196+
"server.sys.shell.cmd", owned_object::make_array(0, ddwaf::memory::get_default_resource()));
197+
for (auto arg : resource) {
198+
array.emplace_back(owned_object::make_string(arg, ddwaf::memory::get_default_resource()));
199+
}
196200

197201
object_store store;
198202
store.insert(std::move(root));

fuzzer/shi_detector_string/src/main.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,11 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *bytes, size_t size)
110110

111111
auto [resource, param] = deserialize(bytes, size);
112112

113-
auto root = owned_object::make_map();
114-
root.emplace("server.request.query", owned_object::make_string(param));
115-
root.emplace("server.sys.shell.cmd", owned_object::make_string(resource));
113+
auto root = owned_object::make_map(0, ddwaf::memory::get_default_resource());
114+
root.emplace("server.request.query",
115+
owned_object::make_string(param, ddwaf::memory::get_default_resource()));
116+
root.emplace("server.sys.shell.cmd",
117+
owned_object::make_string(resource, ddwaf::memory::get_default_resource()));
116118

117119
object_store store;
118120
store.insert(std::move(root));

0 commit comments

Comments
 (0)