diff --git a/src/error.c b/src/error.c
index 6e6a96311727a16863e5daca523e85a4c277ed7f..c8bd289d709f7f53679feee8ac2f68db590801ad 100644
--- a/src/error.c
+++ b/src/error.c
@@ -16,7 +16,7 @@
 #include "backend.h"
 #include "operators.h"
 
-RCSID("$Id: error.c,v 1.18 1998/04/16 21:30:50 hubbe Exp $");
+RCSID("$Id: error.c,v 1.19 1998/05/15 18:45:37 grubba Exp $");
 
 #undef ATTRIBUTE
 #define ATTRIBUTE(X)
@@ -98,7 +98,7 @@ static const char *in_error;
  */
 void va_error(const char *fmt, va_list args) ATTRIBUTE((noreturn))
 {
-  char buf[2000];
+  char buf[4096];
   if(in_error)
   {
     const char *tmp=in_error;
@@ -108,7 +108,11 @@ void va_error(const char *fmt, va_list args) ATTRIBUTE((noreturn))
 
   in_error=buf;
 
+#ifdef HAVE_VSNPRINTF
+  vsnprintf(bug, 4090, fmt, args);
+#else /* !HAVE_VSNPRINTF */
   VSPRINTF(buf, fmt, args);
+#endif /* HAVE_VSNPRINTF */
 
   if(!recoveries)
   {
diff --git a/src/program.c b/src/program.c
index 70152d3dfc8e5df5674488812093190a0d241e7d..148ce571ba64f638849134f2f96f40351babfad9 100644
--- a/src/program.c
+++ b/src/program.c
@@ -4,7 +4,7 @@
 ||| See the files COPYING and DISCLAIMER for more information.
 \*/
 #include "global.h"
-RCSID("$Id: program.c,v 1.89 1998/04/29 00:21:13 hubbe Exp $");
+RCSID("$Id: program.c,v 1.90 1998/05/15 18:43:45 grubba Exp $");
 #include "program.h"
 #include "object.h"
 #include "dynamic_buffer.h"
@@ -2114,8 +2114,14 @@ void my_yyerror(char *fmt,...)  ATTRIBUTE((format(printf,1,2)))
 {
   va_list args;
   char buf[8192];
+
   va_start(args,fmt);
-  VSPRINTF(buf,fmt,args);
+
+#ifdef HAVE_VSNPRINTF
+  vsnprintf(buf, 8190, fmt, args);
+#else /* !HAVE_VSNPRINTF */
+  VSPRINTF(buf, fmt, args);
+#endif /* HAVE_VSNPRINTF */
 
   if((long)strlen(buf) >= (long)sizeof(buf))
     fatal("Buffer overflow in my_yyerror.\n");