Skip to content

Commit 1c344b7

Browse files
authored
Merge pull request #8997 from shirady/fix-list-object-versions
`ListObjects` `ListObjectVersions` API | Fix encoded url of `undefined` value
2 parents 752d661 + 6636a38 commit 1c344b7

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

src/endpoint/s3/ops/s3_get_bucket_versions.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ async function get_bucket_versions(req) {
3737
return {
3838
ListVersionsResult: [{
3939
Name: req.params.bucket,
40-
Prefix: field_encoder(req.query.prefix),
40+
Prefix: field_encoder(req.query.prefix) || '',
4141
Delimiter: field_encoder(req.query.delimiter),
4242
MaxKeys: max_keys_received,
43-
KeyMarker: field_encoder(req.query['key-marker']),
44-
VersionIdMarker: version_id_marker,
43+
KeyMarker: field_encoder(req.query['key-marker']) || '',
44+
VersionIdMarker: version_id_marker || '',
4545
IsTruncated: reply.is_truncated,
4646
NextKeyMarker: field_encoder(reply.next_marker),
4747
NextVersionIdMarker: reply.next_version_id_marker,

src/endpoint/s3/s3_utils.js

+2
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,7 @@ function response_field_encoder_none(value) {
695695
* with plus (+) instead of spaces (and not %20 as encodeURIComponent() does)
696696
*/
697697
function response_field_encoder_url(value) {
698+
if (value === undefined) return undefined; // else the undefined value will be a string of 'undefined'
698699
return new URLSearchParams({ 'a': value }).toString().slice(2); // slice the leading 'a='
699700
}
700701

@@ -864,6 +865,7 @@ exports.get_http_response_from_resp = get_http_response_from_resp;
864865
exports.get_http_response_date = get_http_response_date;
865866
exports.XATTR_SORT_SYMBOL = XATTR_SORT_SYMBOL;
866867
exports.get_response_field_encoder = get_response_field_encoder;
868+
exports.response_field_encoder_url = response_field_encoder_url;
867869
exports.parse_decimal_int = parse_decimal_int;
868870
exports.parse_restore_request_days = parse_restore_request_days;
869871
exports.parse_version_id = parse_version_id;

src/test/unit_tests/jest_tests/test_s3_utils.test.js

+28
Original file line numberDiff line numberDiff line change
@@ -200,4 +200,32 @@ describe('s3_utils', () => {
200200
expect(res.restrict_public_buckets).toBe(false);
201201
});
202202
});
203+
204+
describe('response_field_encoder_url', () => {
205+
it('should return undefined value', () => {
206+
const value = undefined;
207+
const field_encoded = s3_utils.response_field_encoder_url(value);
208+
expect(field_encoded).toBe(undefined);
209+
expect(typeof field_encoded).not.toBe('string');
210+
211+
});
212+
it('should encode value without spaces (no special characters)', () => {
213+
const value = 'test';
214+
const field_encoded = s3_utils.response_field_encoder_url(value);
215+
expect(typeof field_encoded).toBe('string');
216+
expect(field_encoded).toBe(value);
217+
});
218+
it('should encode value without spaces (with special characters)', () => {
219+
const value = 'photos/';
220+
const field_encoded = s3_utils.response_field_encoder_url(value);
221+
expect(typeof field_encoded).toBe('string');
222+
expect(field_encoded).toBe('photos%2F');
223+
});
224+
it('should encode value with spaces', () => {
225+
const value = 'my test';
226+
const field_encoded = s3_utils.response_field_encoder_url(value);
227+
expect(typeof field_encoded).toBe('string');
228+
expect(field_encoded).toBe('my+test');
229+
});
230+
});
203231
});

0 commit comments

Comments
 (0)