Fix for 687461, C stack overflow quetly quits
Alex Cherepanov <[email protected]> Fri, 06 Aug 2004 00:50:26 -0400
| Newsgroups | gmane.comp.printing.ghostscript.patches |
|---|---|
| Organization | Coscript Software |
| Message-ID | <[email protected]> |
Catch and report C stack overflow. By default the MSVC program just silently dies. Fix bug 687461 _______________________________________________ gs-code-review mailing list [email protected] http://www.ghostscript.com/mailman/listinfo/gs-code-review
stack.diff
(text/plain, 1.7 KB)
Index: gs/src/dwmain.c
===================================================================
RCS file: /cvs/ghostscript/gs/src/dwmain.c,v
retrieving revision 1.18
diff -b -u -r1.18 dwmain.c
--- gs/src/dwmain.c 7 Jul 2004 09:33:19 -0000 1.18
+++ gs/src/dwmain.c 6 Aug 2004 04:38:04 -0000
@@ -328,12 +328,17 @@
nargv[2] = ddpi;
memcpy(&nargv[3], &argv[1], argc * sizeof(char *));
+ __try {
code = gsdll.init_with_args(instance, nargc, nargv);
if (code == 0)
code = gsdll.run_string(instance, start_string, 0, &exit_code);
code1 = gsdll.exit(instance);
if (code == 0 || (code == e_Quit && code1 != 0))
code = code1;
+ } __except(_exception_code() == EXCEPTION_STACK_OVERFLOW) {
+ code = e_Fatal;
+ text_puts(tw, "*** C stack overflow. Quiting...\n");
+ }
gsdll.delete_instance(instance);
Index: gs/src/dwmainc.c
===================================================================
RCS file: /cvs/ghostscript/gs/src/dwmainc.c,v
retrieving revision 1.20
diff -b -u -r1.20 dwmainc.c
--- gs/src/dwmainc.c 7 Jul 2004 09:33:19 -0000 1.20
+++ gs/src/dwmainc.c 6 Aug 2004 04:38:04 -0000
@@ -407,12 +407,17 @@
nargv[2] = ddpi;
memcpy(&nargv[3], &argv[1], argc * sizeof(char *));
+ __try {
code = gsdll.init_with_args(instance, nargc, nargv);
if (code == 0)
code = gsdll.run_string(instance, start_string, 0, &exit_code);
code1 = gsdll.exit(instance);
if (code == 0 || (code == e_Quit && code1 != 0))
code = code1;
+ } __except(_exception_code() == EXCEPTION_STACK_OVERFLOW) {
+ code = e_Fatal;
+ fprintf(stderr, "*** C stack overflow. Quiting...\n");
+ }
gsdll.delete_instance(instance);