Skip to content

Commit b28ed50

Browse files
fix: do not return duplicates of encrypted fields COMPASS-5869 (#3144)
1 parent f22a987 commit b28ed50

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

packages/data-service/src/csfle-collection-tracker.spec.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,4 +417,30 @@ describe('CSFLECollectionTracker', function () {
417417
});
418418
});
419419
});
420+
421+
context('with client-side and server-side FLE2 schema info', function () {
422+
beforeEach(async function () {
423+
[tracker, dataService] = await createTracker({
424+
encryptedFieldsMap: {
425+
[`${dbName}.test3`]: {
426+
fields: [{ path: 'n.a', keyId: SOME_UUID2, bsonType: 'string' }],
427+
},
428+
},
429+
});
430+
const crudClient: MongoClient = (dataService as any)._initializedClient(
431+
'CRUD'
432+
);
433+
await crudClient.db(dbName).createCollection('test3', {
434+
encryptedFields: {
435+
fields: [{ path: 'n.a', keyId: SOME_UUID2, bsonType: 'string' }],
436+
},
437+
});
438+
});
439+
440+
it('does not return duplicates of encrypted fields', async function () {
441+
expect(
442+
await tracker.knownSchemaForCollection(`${dbName}.test3`)
443+
).to.deep.equal({ hasSchema: true, encryptedFields: ['n.a'] });
444+
});
445+
});
420446
});

packages/data-service/src/csfle-collection-tracker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ export class CSFLECollectionTrackerImpl implements CSFLECollectionTracker {
218218
...(info.clientEnforcedEncryptedFields ?? []),
219219
...(info.serverEnforcedEncryptedFields ?? []),
220220
].map((fieldPath) => fieldPath.join('.'));
221-
return { hasSchema, encryptedFields };
221+
return { hasSchema, encryptedFields: [...new Set(encryptedFields)] };
222222
}
223223

224224
_processClientSchemaDefinitions(): void {

0 commit comments

Comments
 (0)