gbranden pushed a commit to branch master
in repository groff.

commit d9332be66eb055e73eda6071b3da57988804c50c
Author: G. Branden Robinson <[email protected]>
AuthorDate: Sat Oct 3 15:53:40 2026 -0500

    [grn]: Regression-test Savannah #68686.
    
    * src/preproc/grn/tests/avoids-stack-overflow-on-curve-commands.sh: Do
      it.
    
    * src/preproc/grn/grn.am (grn_TESTS): Run test.
    
    Test fails at this commit.
---
 ChangeLog                                          |   8 +
 src/preproc/grn/grn.am                             |   1 +
 .../avoids-stack-overflow-on-curve-commands.sh     | 271 +++++++++++++++++++++
 3 files changed, 280 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index bef2aaa52..2e3be0e0f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2026-10-03  G. Branden Robinson <[email protected]>
+
+       [grn]: Regression-test Savannah #68686.
+
+       * src/preproc/grn/tests/\
+       avoids-stack-overflow-on-curve-commands.sh: Do it.
+       * src/preproc/grn/grn.am (grn_TESTS): Run test.
+
 2026-10-01  G. Branden Robinson <[email protected]>
 
        * HACKING: Rename "Automake" section to "Managing Makefiles",
diff --git a/src/preproc/grn/grn.am b/src/preproc/grn/grn.am
index 6aef13a49..514c0b27c 100644
--- a/src/preproc/grn/grn.am
+++ b/src/preproc/grn/grn.am
@@ -29,6 +29,7 @@ PREFIXMAN1 += src/preproc/grn/grn.1
 EXTRA_DIST += src/preproc/grn/README src/preproc/grn/grn.1.man
 
 grn_TESTS = \
+  src/preproc/grn/tests/avoids-stack-overflow-on-curve-commands.sh \
   src/preproc/grn/tests/passes-through-input-with-eighth-bit-set.sh
 TESTS += $(grn_TESTS)
 EXTRA_DIST += $(grn_TESTS)
diff --git a/src/preproc/grn/tests/avoids-stack-overflow-on-curve-commands.sh 
b/src/preproc/grn/tests/avoids-stack-overflow-on-curve-commands.sh
new file mode 100755
index 000000000..239cfbe42
--- /dev/null
+++ b/src/preproc/grn/tests/avoids-stack-overflow-on-curve-commands.sh
@@ -0,0 +1,271 @@
+#!/bin/sh
+#
+# Copyright 2026 G. Branden Robinson
+#
+# This file is part of groff, the GNU roff typesetting system.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+grn="${abs_top_builddir:-.}/grn"
+fontdir="${abs_top_builddir:-.}/font"
+
+sandbox_dir=$(mktemp -d)
+if [ $? -ne 0 ]
+then
+    echo "cannot create temporary directory; skipping" >&2
+    exit 77 # skip
+fi
+
+# Regression-test Savannah #68686.
+#
+# Thanks to Pavol Sloboda for this reproducer.
+
+gremlin_file="$sandbox_dir"/68686.grn
+
+cat > "$gremlin_file" <<EOF
+gremlinfile
+0 0 0
+CURVE SPLINE
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+8 8
+9 9
+10 10
+11 11
+12 12
+13 13
+14 14
+15 15
+16 16
+17 17
+18 18
+19 19
+20 20
+21 21
+22 22
+23 23
+24 24
+25 25
+26 26
+27 27
+28 28
+29 29
+30 30
+31 31
+32 32
+33 33
+34 34
+35 35
+36 36
+37 37
+38 38
+39 39
+40 40
+41 41
+42 42
+43 43
+44 44
+45 45
+46 46
+47 47
+48 48
+49 49
+50 50
+51 51
+52 52
+53 53
+54 54
+55 55
+56 56
+57 57
+58 58
+59 59
+60 60
+61 61
+62 62
+63 63
+64 64
+65 65
+66 66
+67 67
+68 68
+69 69
+70 70
+71 71
+72 72
+73 73
+74 74
+75 75
+76 76
+77 77
+78 78
+79 79
+80 80
+81 81
+82 82
+83 83
+84 84
+85 85
+86 86
+87 87
+88 88
+89 89
+90 90
+91 91
+92 92
+93 93
+94 94
+95 95
+96 96
+97 97
+98 98
+99 99
+100 100
+101 101
+102 102
+103 103
+104 104
+105 105
+106 106
+107 107
+108 108
+109 109
+110 110
+111 111
+112 112
+113 113
+114 114
+115 115
+116 116
+117 117
+118 118
+119 119
+120 120
+121 121
+122 122
+123 123
+124 124
+125 125
+126 126
+127 127
+128 128
+129 129
+130 130
+131 131
+132 132
+133 133
+134 134
+135 135
+136 136
+137 137
+138 138
+139 139
+140 140
+141 141
+142 142
+143 143
+144 144
+145 145
+146 146
+147 147
+148 148
+149 149
+150 150
+151 151
+152 152
+153 153
+154 154
+155 155
+156 156
+157 157
+158 158
+159 159
+160 160
+161 161
+162 162
+163 163
+164 164
+165 165
+166 166
+167 167
+168 168
+169 169
+170 170
+171 171
+172 172
+173 173
+174 174
+175 175
+176 176
+177 177
+178 178
+179 179
+180 180
+181 181
+182 182
+183 183
+184 184
+185 185
+186 186
+187 187
+188 188
+189 189
+190 190
+191 191
+192 192
+193 193
+194 194
+195 195
+196 196
+197 197
+198 198
+199 199
+200 200
+201 201
+-1 -1
+1 1
+0
+-1
+EOF
+
+input='.
+.sp
+Here is some text before the graphic.
+.GS C
+file '"$gremlin_file"'
+.GE
+.pp
+Here is some text after the graphic.
+.'
+
+error=$(printf '%s\n' "$input" | "$grn" -F "$fontdir" 2>&1 > /dev/null)
+status=$?
+
+# We expect failure.
+if [ $status -eq 1 ] || [ $status -eq 3 ]
+then
+    rm -rf "$sandbox_dir"
+    exit 0
+else
+    echo "test failed; files left in \"$sandbox_dir\"" >&2
+    exit 1
+fi
+
+# vim:set autoindent expandtab shiftwidth=4 tabstop=4 textwidth=72:

_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit

Reply via email to