Skip to content

Commit eaf5361

Browse files
authored
feat: add url_search_params_reset api (#701)
1 parent 46f19aa commit eaf5361

File tree

6 files changed

+43
-0
lines changed

6 files changed

+43
-0
lines changed

fuzz/url_search_params.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,9 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
4848
entries.next();
4949
}
5050

51+
// This is testing a private method used only for C API.
52+
std::string resetted_value = fdp.ConsumeRandomLengthString(256);
53+
search_params.reset(resetted_value);
54+
5155
return 0;
5256
}

include/ada/url_search_params-inl.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ namespace ada {
2222
template <typename T, ada::url_search_params_iter_type Type>
2323
url_search_params url_search_params_iter<T, Type>::EMPTY;
2424

25+
inline void url_search_params::reset(std::string_view input) {
26+
params.clear();
27+
initialize(input);
28+
}
29+
2530
inline void url_search_params::initialize(std::string_view input) {
2631
if (!input.empty() && input.front() == '?') {
2732
input.remove_prefix(1);

include/ada/url_search_params.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,14 @@ struct url_search_params {
130130
inline auto back() const { return params.back(); }
131131
inline auto operator[](size_t index) const { return params[index]; }
132132

133+
/**
134+
* @private
135+
* Used to reset the search params to a new input.
136+
* Used primarily for C API.
137+
* @param input
138+
*/
139+
void reset(std::string_view input);
140+
133141
private:
134142
typedef std::pair<std::string, std::string> key_value_pair;
135143
std::vector<key_value_pair> params{};

include/ada_c.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ ada_string ada_search_params_get(ada_url_search_params result, const char* key,
151151
size_t key_length);
152152
ada_strings ada_search_params_get_all(ada_url_search_params result,
153153
const char* key, size_t key_length);
154+
void ada_search_params_reset(ada_url_search_params result, const char* input,
155+
size_t length);
154156
ada_url_search_params_keys_iter ada_search_params_get_keys(
155157
ada_url_search_params result);
156158
ada_url_search_params_values_iter ada_search_params_get_values(

src/ada_c.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,15 @@ void ada_search_params_sort(ada_url_search_params result) {
503503
}
504504
}
505505

506+
void ada_search_params_reset(ada_url_search_params result, const char* input,
507+
size_t length) {
508+
ada::result<ada::url_search_params>& r =
509+
*(ada::result<ada::url_search_params>*)result;
510+
if (r) {
511+
r->reset(std::string_view(input, length));
512+
}
513+
}
514+
506515
void ada_search_params_append(ada_url_search_params result, const char* key,
507516
size_t key_length, const char* value,
508517
size_t value_length) {

tests/ada_c.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,21 @@ TEST(ada_c, ada_get_scheme_type) {
259259
SUCCEED();
260260
}
261261

262+
TEST(ada_c, ada_search_params_reset) {
263+
ada_url_search_params out;
264+
265+
std::string_view input = "a=b&c=d&c=e&f=g";
266+
out = ada_parse_search_params(input.data(), input.size());
267+
ASSERT_EQ(ada_search_params_size(out), 4);
268+
269+
std::string_view resetted_value = "a=b";
270+
ada_search_params_reset(out, resetted_value.data(), resetted_value.size());
271+
ASSERT_EQ(ada_search_params_size(out), 1);
272+
273+
ada_free_search_params(out);
274+
SUCCEED();
275+
}
276+
262277
TEST(ada_c, ada_url_search_params) {
263278
std::string_view input;
264279
ada_url_search_params out;

0 commit comments

Comments
 (0)