<div dir="ltr">I don't understand. Could you show example code? Thanks.<div><br><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 11, 2015 at 12:00 PM, John Lenz <span dir="ltr"><<a href="mailto:concavelenz@gmail.com" target="_blank">concavelenz@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Tue, Mar 10, 2015 at 9:10 PM, Mark S. Miller <span dir="ltr"><<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span>On Tue, Mar 10, 2015 at 9:02 PM, Domenic Denicola <span dir="ltr"><<a href="mailto:d@domenic.me" target="_blank">d@domenic.me</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">I don’t see how any of this follows. SES can censor/remove/etc. either the .stack getter or the .getStack function. They are isomorphic.</span></p></div></div></blockquote><div><br></div></span><div>I can selectively provide or deny a given getStack function to different code in the same realm.</div></div></div></div></blockquote><div><br></div></span><div>Can't you do the same by hiding "Error" in the same way that "window" is hidden?  Through a proxy or subclass?</div><div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">.stack already has very close to de-facto standard behavior.</span></p></div></div></blockquote><div><br></div></span><div>Have you looked at the case analysis I go through in debug.js to parse the variety of stack formats we currently have?</div><span><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> We should be attempting to converge it to a standard, and not leaving it a non-interoperable mess
 while adding a second API.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">I also don’t see why .stack cannot map backward through different source maps. Again, a getter and a function are isomorphic in this regard.</span></p></div></div></blockquote><div><br></div></span><div>In a given realm, there can only be one Error.prototype.stack. But what getStack function is in scope can differ per scope as well as per loader.</div><div><div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">
<u></u><u></u></span></p>
<p class="MsoNormal"><a name="14c0a35cf1611d23_14c0707192a2b4f9_14c06ff7e5c6c045__MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></a></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Mark S. Miller [mailto:<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>]
<br>
<b>Sent:</b> Wednesday, March 11, 2015 12:12<br>
<b>To:</b> Domenic Denicola<br>
<b>Cc:</b> John Lenz; es-discuss; Erik Arvidsson</span></p><div><div><br>
<b>Subject:</b> Re: Maximally minimal stack trace standardization<u></u><u></u></div></div><p></p><div><div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">No, that makes the std SES API non-conformant to the std API, making porting more difficult, and making it harder to write code that works in both environments.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Also, if you make it look like err.stack, then no matter what you stdize, it will conflict with existing err.stack behavior, since they conflict with each other. This makes the transition more difficult. If the new std behavior looks like
 getStack(err), then it can be rolled out without creating a transition conflict.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">As so often happens, the better security is the better modularity. If you make it err.stack, then you have to make visible one canonical mapping to source positions. If you make it getStack(err), then different getStack functions might
 map backwards through different sourcemaps.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Tue, Mar 10, 2015 at 7:45 PM, Domenic Denicola <<a href="mailto:d@domenic.me" target="_blank">d@domenic.me</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Can’t we just have Error.prototype.stack be a getter that SES is allowed to delete and hide away for
 its own purposes later?</span><u></u><u></u></p>
<p class="MsoNormal"><a name="14c0a35cf1611d23_14c0707192a2b4f9_14c06ff7e5c6c045_14c06b93292eda0e__MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></a><u></u><u></u></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> es-discuss [mailto:<a href="mailto:es-discuss-bounces@mozilla.org" target="_blank">es-discuss-bounces@mozilla.org</a>]
<b>On Behalf Of </b>John Lenz<br>
<b>Sent:</b> Wednesday, March 11, 2015 08:35<br>
<b>To:</b> Mark S. Miller<br>
<b>Cc:</b> es-discuss; Erik Arvidsson<br>
<b>Subject:</b> Re: Maximally minimal stack trace standardization</span><u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal"> Ok, as long as we are clear there is an existing information leak on non-v8 engines.   <u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">On Tue, Mar 10, 2015 at 1:48 PM, Mark S. Miller <<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">On Chrome and Opera (v8), <<a href="https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/ses/debug.js" target="_blank">https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/ses/debug.js</a>>
 hides the stack. It is important that we not lose this.<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Regarding the rest, as previously discussed, there are enough differences between browsers that there is no legacy we must codify because of web-wide agreement. Take a look at the
 extensive efforts <<a href="https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/ses/debug.js" target="_blank">https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/ses/debug.js</a>> makes to parse despite these
 differences in stack format. As long as we're standardizing something not compat with web-wide legacy, as we must, we might as well also fix this security leak in the process.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">On Tue, Mar 10, 2015 at 1:24 PM, John Lenz <<a href="mailto:concavelenz@gmail.com" target="_blank">concavelenz@gmail.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal">On Mon, Mar 9, 2015 at 5:45 PM, Mark S. Miller <<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<div>
<p class="MsoNormal">On Mon, Mar 9, 2015 at 5:02 PM, John Lenz <<a href="mailto:concavelenz@gmail.com" target="_blank">concavelenz@gmail.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">On Mon, Mar 9, 2015 at 12:15 PM, Mark S. Miller <<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<div>
<p class="MsoNormal">On Sat, Mar 7, 2015 at 2:55 PM, John Lenz <<a href="mailto:concavelenz@gmail.com" target="_blank">concavelenz@gmail.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">I wanted to ping this thread and see how we could get "max-min stack traces" to the next step?<u></u><u></u></p>
</div>
</blockquote>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Hi John, the best way to take this to the next step is to read <<a href="https://docs.google.com/document/d/1QbEE0BsO4lvl7NFTn5WXWeiEIBfaVUF7Dk0hpPpPDzU/edit" target="_blank">https://docs.google.com/document/d/1QbEE0BsO4lvl7NFTn5WXWeiEIBfaVUF7Dk0hpPpPDzU/edit</a>>
 and submit a proposal to <<a href="https://github.com/tc39/ecma262" target="_blank">https://github.com/tc39/ecma262</a>>.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">"<span style="font-family:"Helvetica",sans-serif;color:#333333">If you are a TC39 member representative, just submit a pull request for your proposal."</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Since you are at a member organization, attend and participate actively at TC39 meetings to advance your proposal through the process.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Please keep in mind that the stack trace information should not be available simply from the error object by itself, as that is a bad information leak.<u></u><u></u></p>
</div>
</div>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">The threads I dug up, simply state what you state here.  That there is an "information leak".  Are filename and function names considered sensitive?  In what way?  <u></u><u></u></p>
</div>
</div>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">They reveal details of the callee's computation to the caller that the callee should have been able to assume were private. See starting at middle of 2nd paragraph of <<a href="http://combex.com/papers/darpa-review/security-review.html#UniversalScope" target="_blank">http://combex.com/papers/darpa-review/security-review.html#UniversalScope</a>>.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:13.5pt;font-family:"Times",serif;color:black;background:#fff9d5">the depth of the execution stack is visible, which could pose a risk in certain scenarios:
 for instance, consider trusted code containing a recursive function whose level of recursion depends on some sensitive data (e.g., a secret cryptographic key), and suppose the recursive function is called with arguments that induce it to hit an error condition
 and throw an exception from deep within the recursion.  In such a case, the caller might be able to learn something about the callee’s secrets by catching the exception, examining the resulting stack trace, and recovering the stack depth.  These scenarios
 do not occur in the DarpaBrowser, but have been used in exploits on other systems.  Accordingly, though the risk for DarpaBrowser is small, it should probably be repaired (Fixing this was determined not to be hard).</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    --David Wagner and E. Dean Tribble, <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        "A Security Review of the Combex DarpaBrowser Architecture"<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Likewise, the risk here -- of only a stack of function names and source positions -- is small. But it violates the normal privacy assumptions between caller and callee; and fixing
 it is again not hard -- via getStack.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<div>
<p class="MsoNormal">I did not intend to promote a "rich stack inspection API" such as V8 has.  <u></u><u></u></p>
</div>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal">That's good, but there is one thing I really like about the rich inspection API that it would be a shame to lose: The user doesn't have to do their own adhoc parsing of yet another
 ad hoc textual format. Since this format contains function names, we would then even need to worry about maliciously chosen function names, intended to get this stack format parsing code to misparse. If the stack is a stack of, for example, JSON strings, then
 we avoid this hazard.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#888888"> </span><u></u><u></u></p>
</div>
</div>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal">Sure, but I feel like that is independent, I mostly want to codify what already exists and standardize throw/rethrow behavior.   That is why I ask about the information leak.  Error
 objects already have "stack" properties on all the major browsers. If "stack" leaks information then they already do and the rectification should be there. (It makes no sense to add a "leak-free" API when a "leaky" one already exists).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="color:#888888"> </span><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><span style="color:#888888">--
</span><u></u><u></u></p>
<div>
<p class="MsoNormal"><span style="color:#888888">    Cheers,<br>
    --MarkM</span><u></u><u></u></p>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
<p class="MsoNormal"><span style="color:#888888">--
</span><u></u><u></u></p>
<div>
<p class="MsoNormal"><span style="color:#888888">    Cheers,<br>
    --MarkM</span><u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<p class="MsoNormal">    Cheers,<br>
    --MarkM<u></u><u></u></p>
</div>
</div>
</div></div></div>
</div>

</blockquote></div></div></div><span><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div>    Cheers,<br>    --MarkM</div>
</font></span></div></div>
</blockquote></div></div></div><br></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">    Cheers,<br>    --MarkM</div>
</div>