Hello Jack,<br><br>I find that it is a specific rng that is corrupted, a newly created rng works fine.<br><br>On stackoverflow, someone pointed out that we have no copy constructor for AutoSeeded_RNG and it has a pointer which if copied to a new object could go away if the original object was destructed.<br>
<br>So perhaps that is what is going on here.<br><br>I am looking into this line of thought now with a copy constructor defined to make a new object instead of copying the old.<br><br>Certainly for robustness, the code should be updated to define a copy ctor and an operator= since the default bit copy ones will give bad result of copied pointer.<br>
<br>Thanks.<br><br>-William<br><br><br><div class="gmail_quote">On Mon, Feb 21, 2011 at 10:23 AM, Jack Lloyd <span dir="ltr"><<a href="mailto:lloyd@randombit.net">lloyd@randombit.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hi William,<br>
<br>
Is it possible that somewhere between where your code runs and where<br>
the library is initialized, the library is either shutdown, or the<br>
internal state is corrupted somehow? That could explain why it works<br>
from main but not in a later function call...<br>
<br>
Perhaps in AutoSeeded_RNG::AutoSeeded_RNG<br>
(src/rng/auto_rng/auto_rng.cpp) add debug output to ensure that the<br>
constructor is actually running, and that the rng pointer is not being<br>
modified?<br>
<br>
Also: before calling rng.randomize, try writing to the buffer (eg<br>
iv_val[0] = 0;) first; since it's not entirely clear from this<br>
backtrace which pointer is invalid (though the rng certainly seems<br>
like the likely candidate).<br>
<font color="#888888"><br>
-Jack<br>
</font><div><div></div><div class="h5"><br>
<br>
On Mon, Feb 21, 2011 at 09:51:33AM -0800, William K. Foster wrote:<br>
> Hi Jack,<br>
><br>
> I got the debugger working (issue was I was looking at wrong thread by<br>
> default).<br>
><br>
> Now that I have the debugger working I see segv:<br>
><br>
> (gdb) s<br>
> Botan::AutoSeeded_RNG::randomize (this=0x1270380, out=0x5841420 "", len=1)<br>
>     at ../../src/Botan-1.8.11/build/include/botan/auto_rng.h:23<br>
> (gdb) s<br>
><br>
> Program received signal SIGSEGV, Segmentation fault.<br>
> 0x005d79ee in Botan::AutoSeeded_RNG::randomize (this=0x1270380,<br>
>     out=0x5841420 "", len=1)<br>
>     at ../../src/Botan-1.8.11/build/include/botan/auto_rng.h:23<br>
> (gdb) p rng<br>
> $7 = (class Botan::RandomNumberGenerator *) 0x5841324<br>
> (gdb) p *this<br>
> $8 = {<Botan::RandomNumberGenerator> = {<br>
>     _vptr$RandomNumberGenerator = 0x11efc14}, rng = 0x5841324}<br>
><br>
> Thanks.<br>
><br>
> -William<br>
><br>
> On Mon, Feb 21, 2011 at 9:23 AM, William K. Foster <<a href="mailto:wkf@alum.mit.edu">wkf@alum.mit.edu</a>> wrote:<br>
><br>
> > Hello Jack,<br>
> ><br>
> > I lowered the size down to 16 and it still fails.<br>
> ><br>
> > I added a try catch block around the code, and no exception is caught.<br>
> ><br>
> > I changed the code to what you show below, and the failure occurs inside<br>
> > the last line:<br>
> ><br>
> ><br>
> >     _rng.randomize(&iv_val[0], size);<br>
> ><br>
> > I also tried size 1 and it also fails the same way.<br>
> ><br>
> > Finally, I moved the code to the beginning of main() and it works fine.  So<br>
> > something is going wrong elsewhere that causes this to fail later.  How can<br>
> > we track this down best?<br>
> ><br>
> > Thanks.<br>
> ><br>
> > -William<br>
> ><br>
> ><br>
</div></div><div><div></div><div class="h5">_______________________________________________<br>
botan-devel mailing list<br>
<a href="mailto:botan-devel@randombit.net">botan-devel@randombit.net</a><br>
<a href="http://lists.randombit.net/mailman/listinfo/botan-devel" target="_blank">http://lists.randombit.net/mailman/listinfo/botan-devel</a><br>
</div></div></blockquote></div><br>