Weirdest way to produce a stack overflow
Python
import sys
sys.setrecursionlimit(1)
This will cause the interpreter to fail immediately:
$ cat test.py
import sys
sys.setrecursionlimit(1)
$ python test.py
Exception RuntimeError: 'maximum recursion depth exceeded' in <function _remove at 0x10e947b18> ignored
Exception RuntimeError: 'maximum recursion depth exceeded' in <function _remove at 0x10e8f6050> ignored
$
Instead of using recursion, it just shrinks the stack so it will overflow immediately.
Python
import webbrowser
webbrowser.open("http://stackoverflow.com/")
C / Linux 32bit
void g(void *p){
void *a[1];
a[2]=p-5;
}
void f(){
void *a[1];
g(a[2]);
}
main(){
f();
return 0;
}
Works by overwriting the return address, So g
returns to the point in main
before calling f
. Will work for any platform where return addresses are on the stack, but may require tweaks.
Of course, writing outside of an array is undefined behavior, and you have no guarantee that it will cause a stack overflow rather than, say, paint your mustache blue. Details of platform, compiler and compilation flags may make a big difference.