components/groff/patches/grn-main.cpp.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Mon, 13 Jul 2015 10:37:39 -0700
changeset 4635 a9a24ad5e78c
parent 1883 bb9b7c4fd9b7
permissions -rw-r--r--
21436838 gcc3 and bison3 don't get along
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1883
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     1
Prevent grn from core dumping when given more than 50 command lines
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     2
arguments (CR #17621259).
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     3
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     4
This fix is not currently in the latest groff sources, and has been passed
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     5
upstream.
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     6
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     7
--- groff-1.22.2/src/preproc/grn/main.cpp.orig	2014-01-23 16:54:20.488279600 -0800
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     8
+++ groff-1.22.2/src/preproc/grn/main.cpp	2014-01-23 16:58:22.672837243 -0800
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     9
@@ -92,6 +92,8 @@
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    10
 extern POINT *PTInit();
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    11
 extern POINT *PTMakePoint(double x, double y, POINT **pplist);
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    12
 
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    13
+#define INIT_FILE_SIZE 50  /* Initial size of array of files from cmd line. */
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    14
+#define FILE_SIZE_INCR 50  /* Amount to increase array of files by. */
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    15
 
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    16
 #define SUN_SCALEFACTOR 0.70
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    17
 
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    18
@@ -244,6 +246,25 @@
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    19
 }
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    20
 
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    21
 
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    22
+/* Add a new file entry in the array, expanding array if needs be. */
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    23
+
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    24
+char **
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    25
+add_file(char **file, char *new_file, int *count, int *cur_size)
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    26
+{
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    27
+  if (*count >= *cur_size) {
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    28
+    *cur_size += FILE_SIZE_INCR;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    29
+    file = (char **) realloc((char **) file, *cur_size * sizeof(char *));
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    30
+    if (file == NULL) {
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    31
+      fatal("unable to extend file array");
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    32
+    }
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    33
+  }
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    34
+  file[*count] = new_file;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    35
+  *count += 1;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    36
+
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    37
+  return file;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    38
+}
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    39
+
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    40
+
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    41
 /*----------------------------------------------------------------------------*
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    42
  | Routine:	main (argument_count, argument_pointer)
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    43
  |
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    44
@@ -262,18 +283,22 @@
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    45
   register FILE *fp;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    46
   register int k;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    47
   register char c;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    48
-  register int gfil = 0;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    49
-  char *file[50];
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    50
+  int gfil = 0;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    51
+  char **file = NULL;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    52
+  int file_cur_size = INIT_FILE_SIZE;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    53
   char *operand(int *argcp, char ***argvp);
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    54
 
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    55
+  if ((file = (char **) malloc(file_cur_size * sizeof(char *))) == NULL) {
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    56
+    fatal("unable to create file array");
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    57
+  }
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    58
   while (--argc) {
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    59
     if (**++argv != '-')
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    60
-      file[gfil++] = *argv;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    61
+      file = add_file(file, *argv, &gfil, &file_cur_size);
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    62
     else
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    63
       switch (c = (*argv)[1]) {
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    64
 
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    65
       case 0:
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    66
-	file[gfil++] = NULL;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    67
+	file = add_file(file, NULL, &gfil, &file_cur_size);
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    68
 	break;
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    69
 
bb9b7c4fd9b7 PSARC 2013/394 groff version 1.22.2
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    70
       case 'C':		/* compatibility mode */