[jsc-dev] Protect against modifying contents of `ArrayBuffer` in `JavaScriptCore`

Saam Barati sbarati at apple.com
Thu Nov 8 12:48:38 PST 2018


Hi Karol,

Sorry for the late reply. It doesn't seem like we have API for this. Adding such API wouldn't be hard and it seems useful.

I filed a bug for this:
https://bugs.webkit.org/show_bug.cgi?id=191433

- Saam

> On Oct 20, 2018, at 4:48 AM, Karol Szafranski <karolszafranski at gmail.com> wrote:
> 
> Hi Saam,
> 
> Right now I am using JavaScriptCore which is built into iOS devices. Generally, I use Objective-C and sometimes switch to C APIs if something cannot be done in Objective-C, like creating ArrayBuffer.
> 
> I would like to be able to use workers in JavaScript. Since they are not available out of the box I try to implement that API myself. I would like them to behave like in a web browser, but I’m not able to implement “transferList”. That is the second argument of `postMessage` method.
> 
>> On 19. Oct 2018, at 21:00, Saam barati <sbarati at apple.com> wrote:
>> 
>> Hi Karol,
>> 
>> What context are you running JavaScript code in?
>> 
>> Are you using the JavaScriptCore ObjC or C APIs? Something else?
>> 
>> - Saam
>> 
>>> On Oct 19, 2018, at 1:56 AM, Karol Szafranski <karolszafranski at gmail.com> wrote:
>>> 
>>> `ArrayBuffer` is created in JavaScript engine, and reference is passed to the "native side":
>>> 
>>> 
>>>  var myBuffer = new ArrayBuffer(32);
>>>  protectBufferMemory(myBuffer);
>>> 
>>> 
>>> Now I would like to hide the contents of the `ArrayBuffer` from the JavaScript engine. It would be best if `ArrayBuffer` could suddenly return 0 for `byteLength`, stay empty and nonresizable when looking at it with any `TypedArray`.
>>> 
>>> In the same time, I need to keep the contents of the `ArrayBuffer` in memory in the same place as it was. I do not want to copy those bytes.
>>> 
>>> Note: this is exactly how `ArrayBuffer` behaves in Chrome when you `postMessage` to a `Worker` with `ArrayBuffer` instance in the "transfer" array.
>>> 
>>> If there is no way of doing this, the following alternatives would also be acceptable:
>>> 
>>> 1. Removing the `ArrayBuffer` instance from the JavaScript engine, so that all variables pointing to it will return `undefined` would also be acceptable. As long as data will not be removed from memory.
>>> 
>>> 2. Keeping `ArrayBuffer` data visible inside JavaScript engine but disallow modification.
>>> 
>>> Thank you very much in advance.
>>> 
>>> Karol Szafrański
>>> 
>>> _______________________________________________
>>> jsc-dev mailing list
>>> jsc-dev at lists.webkit.org
>>> https://lists.webkit.org/mailman/listinfo/jsc-dev
>> 
> 
> 
> Karol Szafrański
> 



More information about the jsc-dev mailing list