Защита от изменения содержимого `ArrayBuffer` в` JavaScriptCore` - PullRequest
0 голосов
/ 18 октября 2018

Защита от изменения содержимого ArrayBuffer в JavaScriptCore

В какой-то момент при выполнении JavaScript в JSContext я получаю ссылку на ArrayBuffer (как JSValue*), и мне нужнозащитить память, на которую указывает ArrayBuffer, от изменения ее содержимого.

Подробности:

ArrayBuffer создан в движке JavaScript, и ссылка передается «на нативную сторону»:

var myBuffer = new ArrayBuffer(32);
protectBufferMemory(myBuffer);

Теперь я хотел бы скрыть содержимое ArrayBuffer из движка JavaScript.Было бы лучше, если бы ArrayBuffer мог внезапно вернуть 0 для byteLength, оставаясь пустым и не изменяющим размер при просмотре с любым TypedArray.

В то же время мне нужно сохранить содержимоеArrayBuffer в памяти там же, где и был.Я не хочу копировать эти байты.

Примечание: именно так ArrayBuffer ведет себя в Chrome, когда вы postMessage превращаетесь в Worker с ArrayBuffer экземпляром в массиве "Transfer".

Если нет способа сделать это, приемлемы также следующие альтернативы:

  1. Удаление экземпляра ArrayBuffer из движка JavaScript, чтобы все переменные указывалик нему вернется undefined также будет приемлемо.Пока данные не будут удалены из памяти.

  2. Сохранение ArrayBuffer данных видимыми в движке JavaScript, но запрещение модификации.

Я нашелнет способа реализовать какой-либо из них с общедоступным API на iOS.

...