@@ -91,7 +91,7 @@ AwsAuthenticator::prepareHeaders(const HeaderList &headers_to_sign) {
91
91
92
92
canonical_headers_stream << ' :' ;
93
93
if (headerEntry != nullptr ) {
94
- canonical_headers_stream << headerEntry->value ().c_str ();
94
+ canonical_headers_stream << headerEntry->value ().getStringView ();
95
95
// TODO: add warning if null
96
96
}
97
97
canonical_headers_stream << ' \n ' ;
@@ -119,25 +119,13 @@ std::string AwsAuthenticator::getBodyHexSha() {
119
119
120
120
void AwsAuthenticator::fetchUrl () {
121
121
const Http::HeaderString &canonical_url = request_headers_->Path ()->value ();
122
- url_len_ = canonical_url.size ();
123
- url_start_ = canonical_url.c_str ();
124
- const char *query_string_start =
122
+ url_base_ = canonical_url.getStringView ();
123
+ query_string_ =
125
124
Http::Utility::findQueryStringStart (canonical_url);
126
- // bug in: findQueryStringStart - query_string_start will never be null as
127
- // implied in config_impl.cc, but rather it is the end iterator of the string.
128
- if (query_string_start != nullptr ) {
129
- url_len_ = query_string_start - url_start_;
130
- if (url_len_ < canonical_url.size ()) {
131
- // we now know that query_string_start != std::end
132
-
133
- // +1 to skip the question mark
134
- // These should be sorted alphabetically, but I will leave that to the
135
- // caller (which is internal, hence it's ok)
136
- query_string_len_ = canonical_url.size () - url_len_ - 1 ;
137
- query_string_start_ = query_string_start + 1 ;
138
- } else {
139
- query_string_start = nullptr ;
140
- }
125
+ if (query_string_.length () != 0 ) {
126
+ url_base_.remove_suffix (query_string_.length ());
127
+ // remove the question mark
128
+ query_string_.remove_prefix (1 );
141
129
}
142
130
}
143
131
@@ -150,10 +138,10 @@ std::string AwsAuthenticator::computeCanonicalRequestHash(
150
138
151
139
canonicalRequestHash.update (request_method);
152
140
canonicalRequestHash.update (' \n ' );
153
- canonicalRequestHash.update (url_start_, url_len_ );
141
+ canonicalRequestHash.update (url_base_ );
154
142
canonicalRequestHash.update (' \n ' );
155
- if (query_string_start_ != nullptr ) {
156
- canonicalRequestHash.update (query_string_start_, query_string_len_ );
143
+ if (query_string_. length () != 0 ) {
144
+ canonicalRequestHash.update (query_string_ );
157
145
}
158
146
canonicalRequestHash.update (' \n ' );
159
147
canonicalRequestHash.update (canonical_headers);
@@ -279,6 +267,10 @@ void AwsAuthenticator::Sha256::update(const std::string &data) {
279
267
update (data.c_str (), data.size ());
280
268
}
281
269
270
+ void AwsAuthenticator::Sha256::update (const absl::string_view& data) {
271
+ update (data.data (), data.size ());
272
+ }
273
+
282
274
void AwsAuthenticator::Sha256::update (const uint8_t *bytes, size_t size) {
283
275
SHA256_Update (&context_, bytes, size);
284
276
}
0 commit comments