- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Fri, 13 Sep 2013 15:00:16 -0400
- To: Domenic Denicola <domenic@domenicdenicola.com>
- CC: Anne van Kesteren <annevk@annevk.nl>, WebApps WG <public-webapps@w3.org>
On 9/13/13 2:46 PM, Domenic Denicola wrote: > Thanks Boris, this is indeed all very helpful. I just wanted to point out that what you are calling "dictionaries" is largely covered by what I called "destructuring," on the input side at least. E.g. > >> Furthermore, privileged code should never be working with raw page-provided ES objects, because doing that makes confused-deputy scenarios impossible to avoid in practice. For example, dictionaries that will be operated on by privileged script first need to be coerced to a new clean object with a sane proto chain, only value properties, and the values themselves coerced to be safe to work with. To the extent that we do not have a way to specify or perform such a coercion, we have a problem. > > I believe this is almost entirely taken care of by destructuring. Consider this IDL: dictionary Dict1 { long a = 5; }; dictionary Dict2 { sequence<Dict1> dicts; } void foo(optional Dict2 arg); How would you express eqivalent semantics with destructuring? How does destructuring take care of making sure that arg.dicts is a new array? How does it ensure arg.dicts[0] is a new object with an "a" property, not whatever was passed in? And in any case it does not do any coercion on arg.dicts[0].a. This is not a hypothetical setup; there are WebRTC APIs that want behavior akin to this. Or am I just completely out of touch with what destructuring can do nowadays? > Aside from that, much appreciate you spelling out what you find most important, and I think we're on the same page there. Good, good. ;) -Boris
Received on Friday, 13 September 2013 19:00:47 UTC