Неожиданные байты, используемые в хранилище Chrome - PullRequest
2 голосов
/ 02 июля 2019

Я пишу расширение, которое использует chrome.storage API.Я хочу обрезать каждый элемент, чтобы убедиться, что он ниже максимального порогового значения для хранилища (локального и синхронизированного).

В документации указано, что размер байта каждого отдельного элемента составляет

измеряется JSON-строкой его значения плюс длина ключа.

Я использую следующий код для вычисления ожидаемого размера байта:

new TextEncoder().encode(JSON.stringify(value)).length + key.length

Я использую следующий код для проверки фактического использования:

chrome.storage.<storage-area>.set({ [key]: value }, () => {
   chrome.storage.<storage-area>.getBytesInUse(key, bytes => {
        console.log("actual bytes in use", bytes);
   });
});

Учитываяключ «test» и значение «abc», ожидаемое использование байтов - 9b.Фактическое использование байта составляет 9b.

Учитывая ключ «test» и значение «« ταБЬℓσ »», ожидаемое использование байтов составляет 23b.Фактическое использование байта составляет 23b.

Учитывая ключ «test» и значение «<», ожидаемое использование байтов равно 7b.Фактическое использование байта 12b.</p>

Память, конечно, очищается между каждой проверкой.

В последнем примере, что вызывает эти 5 дополнительных, неожиданных байтов?Чего мне не хватает?

Редактировать: я использую Google Chrome версии 73.0.3683.75 (Официальная сборка) (64-разрядная версия)

1 Ответ

2 голосов
/ 02 июля 2019

Я нашел причину благодаря комментарию w0xx0m.

Chrome / Chromium заменяет символ «меньше» на «\ u003C» для предотвращения выполнения скрипта.

Можно найти исходный код здесь .

...