Skip to content

Commit 23d8575

Browse files
author
Kerkesni
committed
escape format marker when stringifying versionID
Issue: ARSN-502
1 parent 83816c4 commit 23d8575

4 files changed

Lines changed: 12 additions & 11 deletions

File tree

lib/storage/metadata/in_memory/metastore.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ const metastore = {
110110
// eslint-disable-next-line
111111
objName = formatVersionKey(objName, params.versionId);
112112
metadata.keyMaps.get(bucketName).set(objName, objVal);
113-
return cb(null, `{"versionId":"${objVal.versionId}"}`);
113+
return cb(null, `{"versionId":${JSON.stringify(objVal.versionId)}}`);
114114
}
115115
if (params && params.versioning) {
116116
const versionId = generateVersionId();
@@ -119,13 +119,13 @@ const metastore = {
119119
// eslint-disable-next-line
120120
objName = formatVersionKey(objName, versionId);
121121
metadata.keyMaps.get(bucketName).set(objName, objVal);
122-
return cb(null, `{"versionId":"${versionId}"}`);
122+
return cb(null, `{"versionId":${JSON.stringify(versionId)}}`);
123123
}
124124
if (params && params.versionId === '') {
125125
const versionId = generateVersionId();
126126
objVal.versionId = versionId; // eslint-disable-line
127127
metadata.keyMaps.get(bucketName).set(objName, objVal);
128-
return cb(null, `{"versionId":"${objVal.versionId}"}`);
128+
return cb(null, `{"versionId":${JSON.stringify(versionId)}}`);
129129
}
130130
metadata.keyMaps.get(bucketName).set(objName, objVal);
131131
return cb(null);

lib/storage/metadata/mongoclient/MongoClientInterface.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -866,7 +866,7 @@ class MongoClientInterface {
866866
c.bulkWrite(ops, {
867867
ordered: true,
868868
})
869-
.then(() => cb(null, `{"versionId": "${versionId}"}`))
869+
.then(() => cb(null, `{"versionId": ${JSON.stringify(versionId)}}`))
870870
.catch((err: MongoBulkWriteError) => {
871871
/*
872872
* Previously related to https://jira.mongodb.org/browse/SERVER-14322
@@ -902,7 +902,7 @@ class MongoClientInterface {
902902
// This error is expected, it means that two differents version were
903903
// put at the same time.
904904
if (isMasterOpError) {
905-
return cb(null, `{"versionId": "${versionId}"}`);
905+
return cb(null, `{"versionId": ${JSON.stringify(versionId)}}`);
906906
}
907907

908908
// If no upserts succeeded and this is not a retry yet, try again with a new version ID
@@ -958,7 +958,7 @@ class MongoClientInterface {
958958
{ $set: { value: objVal }, $setOnInsert: { _id: masterKey } },
959959
{ upsert: true },
960960
)
961-
.then(() => cb(null, `{"versionId": "${objVal.versionId}"}`))
961+
.then(() => cb(null, `{"versionId": ${JSON.stringify(objVal.versionId)}}`))
962962
.catch((err) => {
963963
log.error('putObjectVerCase2: error putting object version', { error: err.message });
964964
return cb(errors.InternalError);
@@ -1003,7 +1003,7 @@ class MongoClientInterface {
10031003
c.bulkWrite(ops, {
10041004
ordered: true,
10051005
})
1006-
.then(() => callback(null, `{"versionId": "${objVal.versionId}"}`))
1006+
.then(() => callback(null, `{"versionId": ${JSON.stringify(objVal.versionId)}}`))
10071007
.catch(err => {
10081008
log.error('putObjectVerCase3: error putting object version', { error: err.message });
10091009
if (err.code === 11000) {
@@ -1158,12 +1158,12 @@ class MongoClientInterface {
11581158
ops.push(masterOp);
11591159
return c.bulkWrite(ops, {
11601160
ordered: true,
1161-
}).then(() => cb(null, `{"versionId": "${objVal.versionId}"}`)).catch((err) => {
1161+
}).then(() => cb(null, `{"versionId": ${JSON.stringify(objVal.versionId)}}`)).catch((err) => {
11621162
// we accept that the update fails if
11631163
// condition is not met, meaning that a more
11641164
// recent master was already in place
11651165
if (err.code === 11000) {
1166-
return cb(null, `{"versionId": "${objVal.versionId}"}`);
1166+
return cb(null, `{"versionId": ${JSON.stringify(objVal.versionId)}}`);
11671167
}
11681168
log.error('putObjectVerCase4: error upserting master', { error: err.message });
11691169
return cb(errors.InternalError);

lib/versioning/VersioningRequestProcessor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ export default class VersioningRequestProcessor {
393393
return callback(err);
394394
}
395395
return this.writeCache.batch({ db, array, options },
396-
logger, err => callback(err, `{"versionId":"${vid}"}`));
396+
logger, err => callback(err, `{"versionId":${JSON.stringify(vid)}}`));
397397
};
398398

399399
if (versionId) {
@@ -618,7 +618,7 @@ export default class VersioningRequestProcessor {
618618
return callback(err);
619619
}
620620
return this.writeCache.batch({ db, array }, logger,
621-
err => callback(err, `{"versionId":"${vid}"}`));
621+
err => callback(err, `{"versionId":${JSON.stringify(vid)}}`));
622622
});
623623
}
624624

tests/unit/versioning/VersionID.spec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ describe('test generating versionIds', () => {
3232
assert.strictEqual(decoded.message, 'Non-base62 character');
3333
});
3434
});
35+
3536
describe('legacy hex encoding', () => {
3637
VID.S3_VERSION_ID_ENCODING_TYPE = 'hex';
3738
const vids = generateRandomVIDs(count);

0 commit comments

Comments
 (0)