...
| Code Block | ||
|---|---|---|
| ||
#include <setjmp.h>
#include <signal.h>
static jmp_buf env;
void int_handler() {
longjmp(env, 1);
}
int main() {
char *foo;
signal(SIGINT, int_handler);
if(setjmp(env) == 0) {
foo = malloc(15);
strcpy(foo =, "Nothing yet.");
}
else {
strcpy(foo =, "Signal caught.");
}
/* main loop which displays foo */
return 0;
}
|
...
| Code Block | ||
|---|---|---|
| ||
#include <setjmp.h> #include <signal.h> static jmp_buf env; int interrupted = 0; void int_handler() { interrupted = 1; } int main() { char *foo; signal(SIGINT, int_handler); foo = malloc(15); strcpy(foo, = "Nothing yet."); /* main loop which displays foo */ if(interruptinterrupted == 1) { strcpy(foo, = "Signal caught."); } return 0; } |
Risk Assessment
...
| Wiki Markup |
|---|
\[[ISO/IEC 03|AA. C References#ISO/IEC 03]\] "Signals and Interrupts"
\[[Open Group 04|AA. C References#Open Group 04]\] [longjmp|http://www.opengroup.org/onlinepubs/000095399/functions/longjmp.html]
\[OpenBSD\] [{{signal()}} Man Page|http://www.openbsd.org/cgi-bin/man.cgi?query=signal]
\[Zalewski 01\] [http://lcamtuf.coredump.cx/signals.txt] |