Skip to content

Commit 2a7d4cf

Browse files
author
Will Toozs
committed
fixup: url encode header response elements
1 parent d09a42d commit 2a7d4cf

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

lib/api/objectPost.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,7 @@ function objectPost(authInfo, request, streamingV4Params, log, callback) {
9595
});
9696
if (storingResult) {
9797
// ETag's hex should always be enclosed in quotes
98-
responseHeaders.Key = request.formData.key;
99-
responseHeaders.location = `/${bucketName}/${request.formData.key}`;
98+
responseHeaders.location = `/${bucketName}/${encodeURIComponent(request.formData.key)}`;
10099
responseHeaders.Bucket = bucketName;
101100
responseHeaders.ETag = `"${storingResult.contentMD5}"`;
102101
}

tests/functional/aws-node-sdk/test/object/post.js

+35
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,41 @@ describe('POST object', () => {
187187
});
188188
});
189189

190+
it('should handle url invalid characters in keys', done => {
191+
const { url } = testContext;
192+
const fields = calculateFields(ak, sk, [{ key: 'key with spaces' }]);
193+
const formData = new FormData();
194+
const encodedKey = 'key%20with%20spaces'; // Expected URL-encoded key
195+
196+
fields.forEach(field => {
197+
formData.append(field.name, field.value);
198+
});
199+
200+
formData.append('file', fileBuffer, { filename });
201+
202+
formData.getLength((err, length) => {
203+
if (err) {
204+
return done(err);
205+
}
206+
207+
return axios.post(url, formData, {
208+
headers: {
209+
...formData.getHeaders(),
210+
'Content-Length': length,
211+
},
212+
})
213+
.then(response => {
214+
assert.equal(response.status, 204);
215+
assert.equal(response.headers.location, `/${bucketName}/${encodedKey}`);
216+
assert.equal(response.headers.bucket, bucketName);
217+
done();
218+
})
219+
.catch(err => {
220+
done(err);
221+
});
222+
});
223+
});
224+
190225
it('should handle error when bucket does not exist', done => {
191226
const fakeBucketName = generateBucketName();
192227
const tempUrl = `${config.endpoint}/${fakeBucketName}`;

0 commit comments

Comments
 (0)