Avoid calling methods on user objects from segfault handler
When the segfault handler is listing loaded features, it iterates through $LOADEDFEATURES and calls StringValueCStr() on each item. This in turn calls #tostr on the object.
If a #tostr method is defined on a non-TSTRING, it is possible to have code run during the segfault handler. If an exception is raised or a tag is thrown, it is possible to escape the segfault handler and recover from a segmentation fault.
I've attached a patch that checks if an item in $LOADEDFEATURES is a TSTRING, and calls rbanyto_s() if not. This will avoid calling any methods which could potentially call back into Ruby-land.
#3 Updated by Nobuyoshi Nakada over 1 year ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r38041.
Charlie, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
vm_dump.c: no methods in segv handler
- vmdump.c (rbvm_bugreport): get rid of calling methods in sigsegv handler. based on a patch by charliesome (Charlie Somerville) [Bug #7402]