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