fix: contain malformed metadata and stale discovery

This commit is contained in:
2026-08-20 01:44:23 +00:00
parent 3b5e2acb75
commit 7d484a3998
10 changed files with 276 additions and 13 deletions
+26
View File
@@ -72,6 +72,32 @@ test('malformed hierarchy metadata does not hide valid cameras', () => {
assert.equal(payload.diagnostics.sites.error, 'Unavailable');
});
test('repairs lone UTF-16 surrogates without changing valid Unicode or hiding cameras', () => {
const payload = projectDeviceHierarchy({
devices: [rawDevice(8, {
name: 'Front \ud800 camera',
model: 'Model \udc00',
address: 'Hall \ud800\udc00 / \udc00',
server_group_id: 'site-\ud800',
device_group_id: 'group-\udc00',
})],
sites: [{ id: 'site-\ud800', name: 'Valid \ud83d\udcf7 \udc00', pending_deletion_start: '\ud800' }],
groups: [{ id: 'group-\udc00', name: 'Group \ud83d\udcf7 \ud800', parent_id: 'site-\ud800' }],
metadataErrors: { sites: 'warning \ud800', groups: 'warning \udc00' },
});
assert.equal(payload.devices.length, 1);
assert.equal(payload.devices[0].name, 'Front \ufffd camera');
assert.equal(payload.devices[0].model, 'Model \ufffd');
assert.equal(payload.devices[0].address, 'Hall \ud800\udc00 / \ufffd');
assert.equal(payload.devices[0].siteId, 'site-\ufffd');
assert.equal(payload.devices[0].deviceGroupId, 'group-\ufffd');
assert.deepEqual(payload.sites, [{ id: 'site-\ufffd', name: 'Valid \ud83d\udcf7 \ufffd', pendingDeletionStart: '\ufffd' }]);
assert.deepEqual(payload.groups, [{ id: 'group-\ufffd', name: 'Group \ud83d\udcf7 \ufffd', parentId: 'site-\ufffd', pendingDeletionStart: null }]);
assert.equal(payload.diagnostics.sites.error, 'warning \ufffd');
assert.doesNotMatch(JSON.stringify(payload), /[\ud800-\udfff]/u);
});
test('rejects a projected hierarchy payload above 8 MiB', () => {
const devices = Array.from({ length: 10_000 }, (_, index) => rawDevice(index, {
name: `Camera ${index} ${'x'.repeat(900)}`,