diff -Naur opencomal-0.2.6/src/pdcexec.c opencomal-0.2.6.patched/src/pdcexec.c --- opencomal-0.2.6/src/pdcexec.c 2002-11-30 09:58:16.000000000 -0500 +++ opencomal-0.2.6.patched/src/pdcexec.c 2017-12-10 17:29:51.489206949 -0500 @@ -25,6 +25,7 @@ #include "pdcexec.h" #include "pdcdsys.h" +#include #include #include #include @@ -42,10 +43,13 @@ PUBLIC void run_error(int error, char *s, ...) { + va_list ap; char *buf; char buf2[MAX_LINELEN]; - vsprintf(buf2, s, (char *) &s + sizeof(s)); + va_start(ap, s); + vsprintf(buf2, s, ap); + va_end(ap); curenv->error = curenv->lasterr = error; mem_free(curenv->lasterrmsg); diff -Naur opencomal-0.2.6/src/pdcmisc.c opencomal-0.2.6.patched/src/pdcmisc.c --- opencomal-0.2.6/src/pdcmisc.c 2017-12-10 17:23:13.344206273 -0500 +++ opencomal-0.2.6.patched/src/pdcmisc.c 2017-12-10 17:24:52.465206441 -0500 @@ -18,6 +18,7 @@ #include "pdcexec.h" #include "pdclist.h" +#include #include #include #include @@ -58,9 +59,12 @@ PUBLIC void my_printf(int stream, int newline, char *s, ...) { + va_list ap; char buf[MAX_LINELEN]; - vsprintf(buf, s, (char *) &s + sizeof(s)); + va_start(ap, s); + vsprintf(buf, s, ap); + va_end(ap); my_put(stream, buf, -1L); if (newline) @@ -70,9 +74,12 @@ PUBLIC void fatal(char *s, ...) { + va_list ap; char buf[140]; - vsprintf(buf, s, (char *) &s + sizeof(s)); + va_start(ap, s); + vsprintf(buf, s, ap); + va_end(ap); my_printf(MSG_ERROR, 1, "FATAL error: %s", buf); longjmp(RESTART, ERR_FATAL); diff -Naur opencomal-0.2.6/src/pdcparss.c opencomal-0.2.6.patched/src/pdcparss.c --- opencomal-0.2.6/src/pdcparss.c 2002-11-30 03:22:16.000000000 -0500 +++ opencomal-0.2.6.patched/src/pdcparss.c 2017-12-10 17:29:21.935206898 -0500 @@ -16,6 +16,8 @@ #include "pdcstr.h" #include "pdcparss.h" +#include + PRIVATE int pars_error_happened = 0; PRIVATE char pars_errtxt[MAX_LINELEN]; @@ -282,11 +284,14 @@ PUBLIC void pars_error(char *s, ...) { + va_list ap; if (pars_error_happened) return; pars_error_happened = lex_pos(); - vsprintf(pars_errtxt, s, (char *) &s + sizeof(s)); + va_start(ap, s); + vsprintf(pars_errtxt, s, ap); + va_end(ap); }