[e-lang] TextWriter/__printOn expectations/contract questions

Kevin Reid kpreid at attglobal.net
Sat Mar 5 09:33:40 EST 2005


On Mar 4, 2005, at 19:25, Mark Miller wrote:

>  There is a danger here. But so long as the extra information is 
> limited to data and DeepPassByCopy objects, it would seem we already 
> have this danger with the TextWriter indent level. We should examine 
> how one might abuse such a channel.
>
> These issues remind be of the Throwable issue: Prior to the 
> DarpaBrowser review, I thought that the restriction that one could 
> only throw DeepPassByCopy data was adequate protection. Perhaps 
> there's the same rude surprise lurking here?

It seems unlikely. This is (relatively) explicit data flow, whereas the 
problem with exceptions is/was (assuming the DeepPassByCopy 
restriction) that they provide a path for data flow which is implicit 
in the code, and therefore 'outside' of the capability rules we expect.


My current attempt at a solution (which I have implemented in E-on-CL)
   <http://www.eros-os.org/pipermail/e-lang/2005-January/010416.html>
does not completely prevent this, as in order to allow *unresolved* 
references to sealed-boxes to be thrown, there is an operation which 
allows 'throwing' arbitrary values which any try-catch can catch 
unaltered.

Among the consequences of this is that in order to maintain confinement 
of a subgraph, all calls into it must catch every exception, or it 
would be able to leak its state and authority.

This is definitely a poor situation (though I think it's slightly 
better than the current one where information may *accidentally* be 
leaked).

I have one idea so far for a solution, which, as usual, I just thought 
up while writing this message:

The pseudo-ejector which is provided to the 'server', instead of acting 
as a sealer as I described before, acts as a resolver (i.e. stores a 
value and becomes disabled), and the throw() does not pass any value 
which is expected to reach the client.

Then, the client, if it receives a broken reference, checks the promise 
which the pseudo-ejector resolves, and if it is resolved, then it 
contains the problem.

This would simplify the semantics of throw()ing that I originally 
proposed, as there are no 'special cases' for sealed boxes.

It has the disadvantage that there is no association between the broken 
reference (created by the 'server''s vat at end-of-turn) and the 
client's check of the promise, so the client might determine that its 
pseudo-ejector was used, while on the server side the exception was 
caught, discarded, and a different exception was thrown. This is not 
necessarily bad, but it is a rather strange behavior if one is used to 
exceptions in languages like Java, or even Common Lisp.

-- 
Kevin Reid                            <http://homepage.mac.com/kpreid/>



More information about the e-lang mailing list