Adam Tkac e2b0b8
--- src/psgen.c
Adam Tkac e2b0b8
+++ src/psgen.c	2008-10-29 10:43:08.512598143 +0100
Adam Tkac e2b0b8
@@ -24,6 +24,7 @@
Adam Tkac e2b0b8
  * Boston, MA 02111-1307, USA.
Adam Tkac e2b0b8
  */
Adam Tkac e2b0b8
 
Adam Tkac e2b0b8
+#include <limits.h>
Adam Tkac e2b0b8
 #include "gsint.h"
Adam Tkac e2b0b8
 
Adam Tkac e2b0b8
 /*
Adam Tkac e2b0b8
@@ -124,7 +125,7 @@ struct gs_token_st
Adam Tkac e2b0b8
 	  double xscale;
Adam Tkac e2b0b8
 	  double yscale;
Adam Tkac e2b0b8
 	  int llx, lly, urx, ury; /* Bounding box. */
Adam Tkac e2b0b8
-	  char filename[512];
Adam Tkac e2b0b8
+	  char filename[PATH_MAX];
Adam Tkac e2b0b8
 	  char *skipbuf;
Adam Tkac e2b0b8
 	  unsigned int skipbuf_len;
Adam Tkac e2b0b8
 	  unsigned int skipbuf_pos;
Adam Tkac e2b0b8
@@ -135,11 +136,11 @@ struct gs_token_st
Adam Tkac e2b0b8
       Color bgcolor;
Adam Tkac e2b0b8
       struct
Adam Tkac e2b0b8
 	{
Adam Tkac e2b0b8
-	  char name[512];
Adam Tkac e2b0b8
+	  char name[PATH_MAX];
Adam Tkac e2b0b8
 	  FontPoint size;
Adam Tkac e2b0b8
 	  InputEncoding encoding;
Adam Tkac e2b0b8
 	} font;
Adam Tkac e2b0b8
-      char filename[512];
Adam Tkac e2b0b8
+      char filename[PATH_MAX];
Adam Tkac e2b0b8
     } u;
Adam Tkac e2b0b8
 };
Adam Tkac e2b0b8
 
Adam Tkac e2b0b8
@@ -248,7 +249,7 @@ static int do_print = 1;
Adam Tkac e2b0b8
 static int user_fontp = 0;
Adam Tkac e2b0b8
 
Adam Tkac e2b0b8
 /* The user ^@font{}-defined font. */
Adam Tkac e2b0b8
-static char user_font_name[256];
Adam Tkac e2b0b8
+static char user_font_name[PATH_MAX];
Adam Tkac e2b0b8
 static FontPoint user_font_pt;
Adam Tkac e2b0b8
 static InputEncoding user_font_encoding;
Adam Tkac e2b0b8
 
Adam Tkac e2b0b8
@@ -978,7 +979,8 @@ large for page\n"),
Adam Tkac e2b0b8
 			FATAL ((stderr,
Adam Tkac e2b0b8
 				_("user font encoding can be only the system's default or `ps'")));
Adam Tkac e2b0b8
 
Adam Tkac e2b0b8
-		      strcpy (user_font_name, token.u.font.name);
Adam Tkac e2b0b8
+		      memset  (user_font_name, 0, sizeof(user_font_name));
Adam Tkac e2b0b8
+		      strncpy (user_font_name, token.u.font.name, sizeof(user_font_name) - 1);
Adam Tkac e2b0b8
 		      user_font_pt.w = token.u.font.size.w;
Adam Tkac e2b0b8
 		      user_font_pt.h = token.u.font.size.h;
Adam Tkac e2b0b8
 		      user_font_encoding = token.u.font.encoding;
Adam Tkac e2b0b8
@@ -1444,7 +1446,7 @@ read_special_escape (InputStream *is, To
Adam Tkac e2b0b8
 	  buf[i] = ch;
Adam Tkac e2b0b8
 	  if (i + 1 >= sizeof (buf))
Adam Tkac e2b0b8
 	    FATAL ((stderr, _("too long argument for %s escape:\n%.*s"),
Adam Tkac e2b0b8
-		    escapes[i].name, i, buf));
Adam Tkac e2b0b8
+		    escapes[e].name, i, buf));
Adam Tkac e2b0b8
 	}
Adam Tkac e2b0b8
       buf[i] = '\0';
Adam Tkac e2b0b8
 
Adam Tkac e2b0b8
@@ -1452,7 +1454,8 @@ read_special_escape (InputStream *is, To
Adam Tkac e2b0b8
       switch (escapes[e].escape)
Adam Tkac e2b0b8
 	{
Adam Tkac e2b0b8
 	case ESC_FONT:
Adam Tkac e2b0b8
-	  strcpy (token->u.font.name, buf);
Adam Tkac e2b0b8
+	  memset  (token->u.font.name, 0, sizeof(token->u.font.name));
Adam Tkac e2b0b8
+	  strncpy (token->u.font.name, buf, sizeof(token->u.font.name) - 1);
Adam Tkac e2b0b8
 
Adam Tkac e2b0b8
 	  /* Check for the default font. */
Adam Tkac e2b0b8
 	  if (strcmp (token->u.font.name, "default") == 0)
Adam Tkac e2b0b8
@@ -1465,7 +1468,8 @@ read_special_escape (InputStream *is, To
Adam Tkac e2b0b8
 		FATAL ((stderr, _("malformed font spec for ^@font escape: %s"),
Adam Tkac e2b0b8
 			token->u.font.name));
Adam Tkac e2b0b8
 
Adam Tkac e2b0b8
-	      strcpy (token->u.font.name, cp);
Adam Tkac e2b0b8
+	      memset  (token->u.font.name, 0, sizeof(token->u.font.name));
Adam Tkac e2b0b8
+	      strncpy (token->u.font.name, cp, sizeof(token->u.font.name) - 1);
Adam Tkac e2b0b8
 	      xfree (cp);
Adam Tkac e2b0b8
 	    }
Adam Tkac e2b0b8
 	  token->type = tFONT;
Adam Tkac e2b0b8
@@ -1544,7 +1548,8 @@ read_special_escape (InputStream *is, To
Adam Tkac e2b0b8
 	  break;
Adam Tkac e2b0b8
 
Adam Tkac e2b0b8
 	case ESC_SETFILENAME:
Adam Tkac e2b0b8
-	  strcpy (token->u.filename, buf);
Adam Tkac e2b0b8
+	  memset  (token->u.filename, 0, sizeof(token->u.font.name));
Adam Tkac e2b0b8
+	  strncpy (token->u.filename, buf, sizeof(token->u.filename) - 1);
Adam Tkac e2b0b8
 	  token->type = tSETFILENAME;
Adam Tkac e2b0b8
 	  break;