Bug Summary

File:src/lib/libkeynote/obj/k.tab.c
Warning:line 1505, column 21
Null pointer passed as 2nd argument to string comparison function

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple amd64-unknown-openbsd7.0 -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name k.tab.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 1 -pic-is-pie -mframe-pointer=all -relaxed-aliasing -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-feature +retpoline-indirect-calls -target-feature +retpoline-indirect-branches -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/usr/src/lib/libkeynote/obj -resource-dir /usr/local/lib/clang/13.0.0 -I . -I /usr/src/lib/libkeynote -internal-isystem /usr/local/lib/clang/13.0.0/include -internal-externc-isystem /usr/include -O2 -fdebug-compilation-dir=/usr/src/lib/libkeynote/obj -ferror-limit 19 -fwrapv -D_RET_PROTECTOR -ret-protector -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-valloc -fno-builtin-free -fno-builtin-strdup -fno-builtin-strndup -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /home/ben/Projects/vmm/scan-build/2022-01-12-194120-40624-1 -x c k.tab.c
1#include <stdlib.h>
2#include <string.h>
3#define YYBYACC1 1
4#define YYMAJOR1 1
5#define YYMINOR9 9
6#define YYLEXknlex() yylexknlex()
7#define YYEMPTY-1 -1
8#define yyclearin(knchar=(-1)) (yycharknchar=(YYEMPTY-1))
9#define yyerrok(knerrflag=0) (yyerrflagknerrflag=0)
10#define YYRECOVERING()(knerrflag!=0) (yyerrflagknerrflag!=0)
11#define yyparseknparse knparse
12#define yylexknlex knlex
13#define yyerrorknerror knerror
14#define yycharknchar knchar
15#define yyvalknval knval
16#define yylvalknlval knlval
17#define yydebugkndebug kndebug
18#define yynerrsknnerrs knnerrs
19#define yyerrflagknerrflag knerrflag
20#define yyssknss knss
21#define yysslimknsslim knsslim
22#define yysspknssp knssp
23#define yyvsknvs knvs
24#define yyvspknvsp knvsp
25#define yystacksizeknstacksize knstacksize
26#define yylhsknlhs knlhs
27#define yylenknlen knlen
28#define yydefredkndefred kndefred
29#define yydgotokndgoto kndgoto
30#define yysindexknsindex knsindex
31#define yyrindexknrindex knrindex
32#define yygindexkngindex kngindex
33#define yytablekntable kntable
34#define yycheckkncheck kncheck
35#define yynameknname knname
36#define yyruleknrule knrule
37#define YYPREFIX"kn" "kn"
38#line 21 "/usr/src/lib/libkeynote/keynote.y"
39#ifndef YYSTYPE_DEFINED
40#define YYSTYPE_DEFINED
41typedef union {
42 char *string;
43 double doubval;
44 int intval;
45 int bool;
46} YYSTYPE;
47#endif /* YYSTYPE_DEFINED */
48#line 46 "/usr/src/lib/libkeynote/keynote.y"
49#include <sys/types.h>
50
51#include <ctype.h>
52#include <math.h>
53#include <regex.h>
54#include <stdio.h>
55#include <stdlib.h>
56#include <string.h>
57
58#include "keynote.h"
59#include "assertion.h"
60
61static int *keynote_kth_array = NULL((void *)0);
62static int keylistcount = 0;
63
64static int resolve_assertion(char *);
65static int keynote_init_kth(void);
66static int isfloatstring(char *);
67static int checkexception(int);
68static char *my_lookup(char *);
69static int intpow(int, int);
70static int get_kth(int);
71#line 72 "k.tab.c"
72#define NUM257 257
73#define KOF258 258
74#define FLOAT259 259
75#define STRING260 260
76#define VARIABLE261 261
77#define TRUE262 262
78#define FALSE263 263
79#define OPENPAREN264 264
80#define CLOSEPAREN265 265
81#define EQQ266 266
82#define COMMA267 267
83#define ACTSTR268 268
84#define LOCINI269 269
85#define KEYPRE270 270
86#define KNVERSION271 271
87#define DOTT272 272
88#define SIGNERKEY273 273
89#define HINT274 274
90#define OPENBLOCK275 275
91#define CLOSEBLOCK276 276
92#define SIGNATUREENTRY277 277
93#define PRIVATEKEY278 278
94#define SEMICOLON279 279
95#define EQ280 280
96#define NE281 281
97#define LT282 282
98#define GT283 283
99#define LE284 284
100#define GE285 285
101#define REGEXP286 286
102#define OR287 287
103#define AND288 288
104#define NOT289 289
105#define PLUS290 290
106#define MINUS291 291
107#define MULT292 292
108#define DIV293 293
109#define MOD294 294
110#define EXP295 295
111#define UNARYMINUS296 296
112#define DEREF297 297
113#define OPENNUM298 298
114#define OPENFLT299 299
115#define YYERRCODE256 256
116const short knlhs[] =
117 { -1,
118 17, 0, 19, 0, 21, 0, 22, 0, 23, 0,
119 24, 0, 25, 0, 20, 20, 8, 8, 26, 11,
120 27, 11, 11, 28, 29, 11, 12, 12, 10, 16,
121 16, 30, 31, 30, 18, 9, 32, 9, 7, 7,
122 6, 6, 3, 33, 3, 34, 3, 3, 3, 3,
123 3, 3, 3, 2, 2, 2, 2, 2, 2, 4,
124 4, 4, 4, 5, 5, 5, 5, 5, 5, 5,
125 5, 5, 5, 13, 13, 13, 13, 13, 13, 13,
126 13, 13, 1, 1, 1, 1, 1, 1, 1, 14,
127 14, 15, 15, 15, 15,
128};
129const short knlen[] =
130 { 2,
131 0, 3, 0, 3, 0, 3, 0, 3, 0, 3,
132 0, 3, 0, 3, 0, 1, 1, 1, 0, 4,
133 0, 4, 3, 0, 0, 6, 1, 3, 1, 0,
134 1, 3, 0, 5, 1, 0, 0, 4, 3, 1,
135 1, 3, 3, 0, 4, 0, 4, 2, 1, 1,
136 1, 1, 1, 3, 3, 3, 3, 3, 3, 3,
137 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
138 3, 1, 2, 3, 3, 3, 3, 3, 2, 3,
139 1, 2, 3, 3, 3, 3, 3, 3, 3, 3,
140 1, 1, 3, 1, 2,
141};
142const short kndefred[] =
143 { 0,
144 3, 1, 5, 11, 7, 9, 13, 0, 0, 0,
145 0, 0, 0, 0, 0, 72, 81, 92, 94, 52,
146 53, 0, 0, 0, 0, 0, 0, 51, 49, 0,
147 50, 0, 37, 35, 0, 0, 91, 4, 0, 2,
148 31, 24, 0, 0, 17, 18, 0, 6, 12, 0,
149 8, 10, 14, 0, 0, 0, 0, 48, 0, 70,
150 79, 95, 73, 82, 0, 46, 44, 0, 0, 0,
151 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
152 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
153 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
154 0, 0, 21, 19, 0, 43, 71, 80, 93, 0,
155 0, 0, 39, 0, 0, 0, 0, 0, 0, 0,
156 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,
157 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
158 0, 78, 90, 0, 0, 0, 0, 0, 0, 0,
159 0, 25, 23, 0, 0, 0, 0, 45, 38, 0,
160 0, 0, 20, 42, 34, 0, 0, 0, 26, 28,
161};
162const short kndgoto[] =
163 { 8,
164 28, 29, 30, 31, 32, 113, 33, 44, 34, 45,
165 46, 167, 35, 47, 37, 40, 10, 38, 9, 48,
166 11, 13, 14, 12, 15, 155, 154, 99, 161, 41,
167 160, 80, 116, 115,
168};
169const short knsindex[] =
170 { 254,
171 0, 0, 0, 0, 0, 0, 0, 0, -240, -236,
172 -147, -249, -133, -133, -214, 0, 0, 0, 0, 0,
173 0, -240, -240, -231, -133, -133, -133, 0, 0, -113,
174 0, 205, 0, 0, 226, 221, 0, 0, -216, 0,
175 0, 0, -147, -233, 0, 0, -241, 0, 0, -133,
176 0, 0, 0, -250, -114, -100, 198, 0, -231, 0,
177 0, 0, 0, 0, -135, 0, 0, -149, -149, -149,
178 -149, -149, -149, -149, -149, -149, -149, -149, -149, -174,
179 -155, -155, -155, -155, -155, -155, -155, -155, -155, -133,
180 -133, -133, -133, -133, -133, -133, -133, -150, -152, -233,
181 -141, -230, 0, 0, -230, 0, 0, 0, 0, -229,
182 -93, -240, 0, -241, -240, -240, -149, -149, 243, 243,
183 243, 243, 243, 243, -106, -106, -179, -179, -179, 0,
184 -240, -155, -155, 249, 249, 249, 249, -88, -88, -165,
185 -165, 0, 0, -241, -241, -241, -241, -241, -241, -241,
186 0, 0, 0, -147, -147, -143, -153, 0, 0, -236,
187 -133, -136, 0, 0, 0, -126, -118, -133, 0, 0,};
188const short knrindex[] =
189 { 0,
190 0, 0, 0, 0, 0, 0, 0, 0, 163, 173,
191 196, 0, 0, 0, 0, 0, 0, 0, 0, 0,
192 0, 0, 0, 0, 0, 0, 0, 0, 0, -78,
193 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
194 0, 0, 0, 206, 0, 0, 1, 0, 0, 0,
195 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
196 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
197 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
198 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
199 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
200 -209, -129, 0, 0, 0, 0, 0, 0, 0, 0,
201 0, -58, 0, -54, 0, 0, 0, 0, -235, -142,
202 -131, -2, 5, 118, -29, 67, -71, -50, 16, 0,
203 2, 0, 0, 124, 130, 134, 136, 88, 103, 37,
204 52, 0, 0, 151, 154, 161, 171, 178, 181, 188,
205 3, 0, 0, 0, 0, 0, -247, 0, 0, 0,
206 0, 4, 0, 0, 0, -39, 0, 0, 0, 0,};
207const short kngindex[] =
208 { 0,
209 0, 0, -14, 0, 21, 0, 0, -36, -83, -8,
210 184, 60, -12, -9, 128, 0, 0, 0, 0, 0,
211 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,
212 0, 0, 0, 0,
213};
214#define YYTABLESIZE544 544
215const short kntable[] =
216 { 36,
217 29, 36, 32, 22, 51, 52, 100, 54, 58, 56,
218 49, 61, 57, 36, 106, 62, 16, 47, 17, 18,
219 19, 20, 21, 22, 39, 16, 47, 17, 156, 56,
220 90, 47, 59, 102, 109, 107, 66, 67, 56, 47,
221 105, 90, 55, 56, 60, 53, 111, 159, 23, 98,
222 24, 56, 56, 103, 104, 114, 25, 26, 27, 24,
223 74, 75, 76, 77, 78, 79, 26, 27, 134, 135,
224 136, 137, 138, 139, 140, 141, 142, 18, 18, 110,
225 143, 144, 145, 146, 147, 148, 149, 150, 119, 120,
226 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
227 157, 158, 36, 17, 131, 36, 36, 16, 132, 151,
228 42, 152, 18, 19, 117, 79, 43, 162, 163, 111,
229 61, 36, 59, 153, 18, 19, 18, 19, 50, 89,
230 50, 59, 164, 54, 67, 133, 59, 110, 60, 112,
231 168, 118, 54, 27, 59, 59, 169, 54, 26, 25,
232 107, 104, 166, 63, 64, 54, 54, 29, 29, 166,
233 65, 25, 36, 25, 108, 68, 69, 70, 71, 72,
234 73, 108, 30, 66, 67, 74, 75, 76, 77, 78,
235 79, 81, 82, 83, 84, 76, 77, 78, 79, 85,
236 86, 87, 88, 66, 89, 15, 85, 86, 87, 88,
237 40, 89, 66, 87, 88, 16, 89, 66, 66, 66,
238 66, 66, 66, 66, 67, 66, 66, 36, 66, 66,
239 66, 66, 66, 67, 41, 27, 101, 170, 67, 67,
240 67, 67, 67, 67, 67, 64, 67, 67, 165, 67,
241 67, 67, 67, 67, 64, 0, 0, 0, 0, 64,
242 64, 64, 64, 64, 64, 64, 0, 64, 64, 0,
243 64, 64, 55, 33, 0, 29, 0, 29, 22, 57,
244 0, 55, 0, 0, 0, 0, 55, 36, 57, 0,
245 68, 0, 0, 57, 55, 55, 0, 29, 29, 68,
246 22, 57, 57, 0, 68, 68, 68, 68, 68, 68,
247 68, 76, 68, 68, 0, 68, 68, 68, 68, 68,
248 76, 0, 0, 0, 0, 76, 77, 0, 76, 76,
249 76, 76, 0, 76, 76, 77, 76, 76, 76, 76,
250 77, 65, 0, 77, 77, 77, 77, 0, 77, 77,
251 65, 77, 77, 77, 77, 65, 65, 65, 65, 65,
252 65, 65, 74, 65, 65, 0, 65, 65, 0, 0,
253 0, 74, 0, 0, 0, 0, 74, 75, 0, 74,
254 74, 74, 74, 0, 74, 74, 75, 74, 74, 0,
255 0, 75, 58, 0, 75, 75, 75, 75, 60, 75,
256 75, 58, 75, 75, 61, 0, 58, 60, 62, 0,
257 63, 0, 60, 61, 58, 58, 0, 62, 61, 63,
258 60, 60, 62, 0, 63, 83, 61, 61, 84, 0,
259 62, 62, 63, 63, 83, 85, 0, 84, 0, 83,
260 0, 0, 84, 0, 85, 86, 0, 83, 83, 85,
261 84, 84, 87, 0, 86, 88, 0, 85, 85, 86,
262 0, 87, 89, 0, 88, 0, 87, 86, 86, 88,
263 0, 89, 109, 0, 87, 87, 89, 88, 88, 90,
264 0, 0, 0, 0, 89, 89, 0, 91, 92, 93,
265 94, 95, 96, 97, 68, 69, 70, 71, 72, 73,
266 0, 0, 90, 0, 74, 75, 76, 77, 78, 79,
267 91, 92, 93, 94, 95, 96, 97, 81, 82, 83,
268 84, 0, 0, 0, 0, 85, 86, 87, 88, 0,
269 89, 1, 2, 3, 4, 0, 5, 0, 0, 0,
270 6, 7, 74, 75, 76, 77, 78, 79, 85, 86,
271 87, 88, 0, 89,
272};
273const short kncheck[] =
274 { 9,
275 0, 0, 0, 0, 13, 14, 43, 22, 23, 22,
276 260, 24, 22, 23, 265, 25, 257, 265, 259, 260,
277 261, 262, 263, 264, 261, 257, 274, 259, 112, 265,
278 272, 279, 264, 43, 265, 265, 287, 288, 274, 287,
279 50, 272, 22, 279, 24, 260, 59, 131, 289, 266,
280 291, 287, 288, 287, 288, 65, 297, 298, 299, 291,
281 290, 291, 292, 293, 294, 295, 298, 299, 81, 82,
282 83, 84, 85, 86, 87, 88, 89, 287, 288, 59,
283 90, 91, 92, 93, 94, 95, 96, 97, 68, 69,
284 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
285 115, 116, 112, 259, 279, 115, 116, 257, 264, 260,
286 258, 264, 260, 261, 264, 295, 264, 154, 155, 132,
287 133, 131, 265, 265, 260, 261, 260, 261, 264, 295,
288 264, 274, 276, 265, 288, 291, 279, 117, 118, 275,
289 267, 291, 274, 299, 287, 288, 265, 279, 298, 297,
290 265, 288, 161, 26, 27, 287, 288, 287, 288, 168,
291 274, 297, 0, 297, 265, 280, 281, 282, 283, 284,
292 285, 265, 0, 287, 288, 290, 291, 292, 293, 294,
293 295, 282, 283, 284, 285, 292, 293, 294, 295, 290,
294 291, 292, 293, 265, 295, 0, 290, 291, 292, 293,
295 279, 295, 274, 292, 293, 0, 295, 279, 280, 281,
296 282, 283, 284, 285, 265, 287, 288, 276, 290, 291,
297 292, 293, 294, 274, 279, 265, 43, 168, 279, 280,
298 281, 282, 283, 284, 285, 265, 287, 288, 160, 290,
299 291, 292, 293, 294, 274, -1, -1, -1, -1, 279,
300 280, 281, 282, 283, 284, 285, -1, 287, 288, -1,
301 290, 291, 265, 261, -1, 265, -1, 267, 265, 265,
302 -1, 274, -1, -1, -1, -1, 279, 276, 274, -1,
303 265, -1, -1, 279, 287, 288, -1, 287, 288, 274,
304 287, 287, 288, -1, 279, 280, 281, 282, 283, 284,
305 285, 265, 287, 288, -1, 290, 291, 292, 293, 294,
306 274, -1, -1, -1, -1, 279, 265, -1, 282, 283,
307 284, 285, -1, 287, 288, 274, 290, 291, 292, 293,
308 279, 265, -1, 282, 283, 284, 285, -1, 287, 288,
309 274, 290, 291, 292, 293, 279, 280, 281, 282, 283,
310 284, 285, 265, 287, 288, -1, 290, 291, -1, -1,
311 -1, 274, -1, -1, -1, -1, 279, 265, -1, 282,
312 283, 284, 285, -1, 287, 288, 274, 290, 291, -1,
313 -1, 279, 265, -1, 282, 283, 284, 285, 265, 287,
314 288, 274, 290, 291, 265, -1, 279, 274, 265, -1,
315 265, -1, 279, 274, 287, 288, -1, 274, 279, 274,
316 287, 288, 279, -1, 279, 265, 287, 288, 265, -1,
317 287, 288, 287, 288, 274, 265, -1, 274, -1, 279,
318 -1, -1, 279, -1, 274, 265, -1, 287, 288, 279,
319 287, 288, 265, -1, 274, 265, -1, 287, 288, 279,
320 -1, 274, 265, -1, 274, -1, 279, 287, 288, 279,
321 -1, 274, 265, -1, 287, 288, 279, 287, 288, 272,
322 -1, -1, -1, -1, 287, 288, -1, 280, 281, 282,
323 283, 284, 285, 286, 280, 281, 282, 283, 284, 285,
324 -1, -1, 272, -1, 290, 291, 292, 293, 294, 295,
325 280, 281, 282, 283, 284, 285, 286, 282, 283, 284,
326 285, -1, -1, -1, -1, 290, 291, 292, 293, -1,
327 295, 268, 269, 270, 271, -1, 273, -1, -1, -1,
328 277, 278, 290, 291, 292, 293, 294, 295, 290, 291,
329 292, 293, -1, 295,
330};
331#define YYFINAL8 8
332#ifndef YYDEBUG0
333#define YYDEBUG0 0
334#endif
335#define YYMAXTOKEN299 299
336#if YYDEBUG0
337const char * const knname[] =
338 {
339"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3400,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3430,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3450,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"NUM","KOF","FLOAT","STRING",
346"VARIABLE","TRUE","FALSE","OPENPAREN","CLOSEPAREN","EQQ","COMMA","ACTSTR",
347"LOCINI","KEYPRE","KNVERSION","DOTT","SIGNERKEY","HINT","OPENBLOCK",
348"CLOSEBLOCK","SIGNATUREENTRY","PRIVATEKEY","SEMICOLON","EQ","NE","LT","GT","LE",
349"GE","REGEXP","OR","AND","NOT","PLUS","MINUS","MULT","DIV","MOD","EXP",
350"UNARYMINUS","DEREF","OPENNUM","OPENFLT",
351};
352const char * const knrule[] =
353 {"$accept : grammarswitch",
354"$$1 :",
355"grammarswitch : LOCINI $$1 localinit",
356"$$2 :",
357"grammarswitch : ACTSTR $$2 program",
358"$$3 :",
359"grammarswitch : KEYPRE $$3 keypredicate",
360"$$4 :",
361"grammarswitch : SIGNERKEY $$4 key",
362"$$5 :",
363"grammarswitch : SIGNATUREENTRY $$5 key",
364"$$6 :",
365"grammarswitch : KNVERSION $$6 STRING",
366"$$7 :",
367"grammarswitch : PRIVATEKEY $$7 STRING",
368"keypredicate :",
369"keypredicate : notemptykeypredicate",
370"notemptykeypredicate : key",
371"notemptykeypredicate : keyexp",
372"$$8 :",
373"keyexp : notemptykeypredicate AND $$8 notemptykeypredicate",
374"$$9 :",
375"keyexp : notemptykeypredicate OR $$9 notemptykeypredicate",
376"keyexp : OPENPAREN keyexp CLOSEPAREN",
377"$$10 :",
378"$$11 :",
379"keyexp : KOF $$10 OPENPAREN $$11 keylist CLOSEPAREN",
380"keylist : key",
381"keylist : key COMMA keylist",
382"key : str",
383"localinit :",
384"localinit : localconstants",
385"localconstants : VARIABLE EQQ STRING",
386"$$12 :",
387"localconstants : VARIABLE EQQ STRING $$12 localconstants",
388"program : prog",
389"prog :",
390"$$13 :",
391"prog : notemptyprog $$13 SEMICOLON prog",
392"notemptyprog : expr HINT afterhint",
393"notemptyprog : expr",
394"afterhint : str",
395"afterhint : OPENBLOCK prog CLOSEBLOCK",
396"expr : OPENPAREN expr CLOSEPAREN",
397"$$14 :",
398"expr : expr AND $$14 expr",
399"$$15 :",
400"expr : expr OR $$15 expr",
401"expr : NOT expr",
402"expr : numexp",
403"expr : floatexp",
404"expr : stringexp",
405"expr : TRUE",
406"expr : FALSE",
407"numexp : numex LT numex",
408"numexp : numex GT numex",
409"numexp : numex EQ numex",
410"numexp : numex LE numex",
411"numexp : numex GE numex",
412"numexp : numex NE numex",
413"floatexp : floatex LT floatex",
414"floatexp : floatex GT floatex",
415"floatexp : floatex LE floatex",
416"floatexp : floatex GE floatex",
417"numex : numex PLUS numex",
418"numex : numex MINUS numex",
419"numex : numex MULT numex",
420"numex : numex DIV numex",
421"numex : numex MOD numex",
422"numex : numex EXP numex",
423"numex : MINUS numex",
424"numex : OPENPAREN numex CLOSEPAREN",
425"numex : NUM",
426"numex : OPENNUM strnotconcat",
427"floatex : floatex PLUS floatex",
428"floatex : floatex MINUS floatex",
429"floatex : floatex MULT floatex",
430"floatex : floatex DIV floatex",
431"floatex : floatex EXP floatex",
432"floatex : MINUS floatex",
433"floatex : OPENPAREN floatex CLOSEPAREN",
434"floatex : FLOAT",
435"floatex : OPENFLT strnotconcat",
436"stringexp : str EQ str",
437"stringexp : str NE str",
438"stringexp : str LT str",
439"stringexp : str GT str",
440"stringexp : str LE str",
441"stringexp : str GE str",
442"stringexp : str REGEXP str",
443"str : str DOTT str",
444"str : strnotconcat",
445"strnotconcat : STRING",
446"strnotconcat : OPENPAREN str CLOSEPAREN",
447"strnotconcat : VARIABLE",
448"strnotconcat : DEREF str",
449};
450#endif
451#ifdef YYSTACKSIZE10000
452#undef YYMAXDEPTH10000
453#define YYMAXDEPTH10000 YYSTACKSIZE10000
454#else
455#ifdef YYMAXDEPTH10000
456#define YYSTACKSIZE10000 YYMAXDEPTH10000
457#else
458#define YYSTACKSIZE10000 10000
459#define YYMAXDEPTH10000 10000
460#endif
461#endif
462#define YYINITSTACKSIZE200 200
463/* LINTUSED */
464int yydebugkndebug;
465int yynerrsknnerrs;
466int yyerrflagknerrflag;
467int yycharknchar;
468short *yysspknssp;
469YYSTYPE *yyvspknvsp;
470YYSTYPE yyvalknval;
471YYSTYPE yylvalknlval;
472short *yyssknss;
473short *yysslimknsslim;
474YYSTYPE *yyvsknvs;
475unsigned int yystacksizeknstacksize;
476int yyparseknparse(void);
477#line 646 "/usr/src/lib/libkeynote/keynote.y"
478
479/*
480 * Find all assertions signed by s and give us the one with the highest
481 * return value.
482 */
483static int
484resolve_assertion(char *s)
485{
486 int i, alg = KEYNOTE_ALGORITHM_NONE0, p = 0;
487 void *key = (void *) s;
488 struct assertion *as;
489 struct keylist *kl;
490
491 kl = keynote_keylist_find(keynote_current_assertion->as_keylist, s);
492 if (kl != NULL((void *)0))
493 {
494 alg = kl->key_alg;
495 key = kl->key_key;
496 }
497
498 for (i = 0;; i++)
499 {
500 as = keynote_find_assertion(key, i, alg);
501 if (as == NULL((void *)0)) /* Gone through all of them */
502 return p;
503
504 if (as->as_kresult == KRESULT_DONE2)
505 if (p < as->as_result)
506 p = as->as_result;
507
508 /* Short circuit if we find an assertion with maximum return value */
509 if (p == (keynote_current_session->ks_values_num - 1))
510 return p;
511 }
512
513 return 0;
514}
515
516/*
517 * Environment variable lookup.
518 */
519static char *
520my_lookup(char *s)
521{
522 struct keynote_session *ks = keynote_current_session;
523 char *ret;
524
525 if (!strcmp(s, "_MIN_TRUST"))
526 {
527 keynote_used_variable = 1;
528 return ks->ks_values[0];
529 }
530 else
531 {
532 if (!strcmp(s, "_MAX_TRUST"))
533 {
534 keynote_used_variable = 1;
535 return ks->ks_values[ks->ks_values_num - 1];
536 }
537 else
538 {
539 if (!strcmp(s, "_VALUES"))
540 {
541 keynote_used_variable = 1;
542 return keynote_env_lookup("_VALUES", ks->ks_env_table,
543 HASHTABLESIZE37);
544 }
545 else
546 {
547 if (!strcmp(s, "_ACTION_AUTHORIZERS"))
548 {
549 keynote_used_variable = 1;
550 return keynote_env_lookup("_ACTION_AUTHORIZERS",
551 ks->ks_env_table, HASHTABLESIZE37);
552 }
553 }
554 }
555 }
556
557 /* Temporary list (regexp results) */
558 if (keynote_temp_list != NULL((void *)0))
559 {
560 ret = keynote_env_lookup(s, &keynote_temp_list, 1);
561 if (ret != NULL((void *)0))
562 return ret;
563 else
564 if (keynote_errno != 0)
565 return NULL((void *)0);
566 }
567
568 /* Local-Constants */
569 if (keynote_init_list != NULL((void *)0))
570 {
571 ret = keynote_env_lookup(s, &keynote_init_list, 1);
572 if (ret != NULL((void *)0))
573 return ret;
574 else
575 if (keynote_errno != 0)
576 return NULL((void *)0);
577 }
578
579 if (ks != NULL((void *)0))
580 {
581 /* Action environment */
582 ret = keynote_env_lookup(s, ks->ks_env_table, HASHTABLESIZE37);
583 if (ret != NULL((void *)0))
584 {
585 keynote_used_variable = 1;
586 return ret;
587 }
588 else
589 if (keynote_errno != 0)
590 return NULL((void *)0);
591 }
592
593 /* Regex table */
594 if ((ks != NULL((void *)0)) && (ks->ks_env_regex != NULL((void *)0)))
595 {
596 ret = keynote_env_lookup(s, &(ks->ks_env_regex), 1);
597 if (ret != NULL((void *)0))
598 {
599 keynote_used_variable = 1;
600 return ret;
601 }
602
603 return NULL((void *)0);
604 }
605
606 return NULL((void *)0);
607}
608
609/*
610 * If we had an exception, the boolean expression should return false.
611 * Otherwise, return the result of the expression (the argument).
612 */
613static int
614checkexception(int i)
615{
616 if (keynote_exceptionflag)
617 {
618 keynote_exceptionflag = 0;
619 return 0;
620 }
621 else
622 return i;
623}
624
625
626/*
627 * Integer exponentation -- copied from Schneier's AC2, page 244.
628 */
629static int
630intpow(int x, int y)
631{
632 int s = 1;
633
634 /*
635 * x^y with y < 0 is equivalent to 1/(x^y), which for
636 * integer arithmetic is 0.
637 */
638 if (y < 0)
639 return 0;
640
641 while (y)
642 {
643 if (y & 1)
644 s *= x;
645
646 y >>= 1;
647 x *= x;
648 }
649
650 return s;
651}
652
653/*
654 * Check whether the string is a floating point number.
655 */
656static int
657isfloatstring(char *s)
658{
659 int i, point = 0;
660
661 for (i = strlen(s) - 1; i >= 0; i--)
662 if (!isdigit((unsigned char)s[i]))
663 {
664 if (s[i] == '.')
665 {
666 if (point == 1)
667 return 0;
668 else
669 point = 1;
670 }
671 else
672 return 0;
673 }
674
675 return 1;
676}
677
678/*
679 * Initialize array for threshold search.
680 */
681static int
682keynote_init_kth(void)
683{
684 int i = keynote_current_session->ks_values_num;
685
686 if (i == -1)
687 return -1;
688
689 keynote_kth_array = calloc(i, sizeof(int));
690 if (keynote_kth_array == NULL((void *)0))
691 {
692 keynote_errno = ERROR_MEMORY-1;
693 return -1;
694 }
695
696 return RESULT_TRUE1;
697}
698
699/*
700 * Get the k-th best return value.
701 */
702static int
703get_kth(int k)
704{
705 int i;
706
707 for (i = keynote_current_session->ks_values_num - 1; i >= 0; i--)
708 {
709 k -= keynote_kth_array[i];
710
711 if (k <= 0)
712 return i;
713 }
714
715 return 0;
716}
717
718/*
719 * Cleanup array.
720 */
721void
722keynote_cleanup_kth(void)
723{
724 if (keynote_kth_array != NULL((void *)0))
725 {
726 free(keynote_kth_array);
727 keynote_kth_array = NULL((void *)0);
728 }
729}
730
731void
732knerror(char *s)
733{}
734#line 727 "k.tab.c"
735/* allocate initial stack or double stack size, up to YYMAXDEPTH */
736static int yygrowstack(void)
737{
738 unsigned int newsize;
739 long sslen;
740 short *newss;
741 YYSTYPE *newvs;
742
743 if ((newsize = yystacksizeknstacksize) == 0)
744 newsize = YYINITSTACKSIZE200;
745 else if (newsize >= YYMAXDEPTH10000)
746 return -1;
747 else if ((newsize *= 2) > YYMAXDEPTH10000)
748 newsize = YYMAXDEPTH10000;
749 sslen = yysspknssp - yyssknss;
750#ifdef SIZE_MAX
751#define YY_SIZE_MAX0xffffffffU SIZE_MAX
752#else
753#define YY_SIZE_MAX0xffffffffU 0xffffffffU
754#endif
755 if (newsize && YY_SIZE_MAX0xffffffffU / newsize < sizeof *newss)
756 goto bail;
757 newss = (short *)realloc(yyssknss, newsize * sizeof *newss);
758 if (newss == NULL((void *)0))
759 goto bail;
760 yyssknss = newss;
761 yysspknssp = newss + sslen;
762 if (newsize && YY_SIZE_MAX0xffffffffU / newsize < sizeof *newvs)
763 goto bail;
764 newvs = (YYSTYPE *)realloc(yyvsknvs, newsize * sizeof *newvs);
765 if (newvs == NULL((void *)0))
766 goto bail;
767 yyvsknvs = newvs;
768 yyvspknvsp = newvs + sslen;
769 yystacksizeknstacksize = newsize;
770 yysslimknsslim = yyssknss + newsize - 1;
771 return 0;
772bail:
773 if (yyssknss)
774 free(yyssknss);
775 if (yyvsknvs)
776 free(yyvsknvs);
777 yyssknss = yysspknssp = NULL((void *)0);
778 yyvsknvs = yyvspknvsp = NULL((void *)0);
779 yystacksizeknstacksize = 0;
780 return -1;
781}
782
783#define YYABORTgoto yyabort goto yyabort
784#define YYREJECTgoto yyabort goto yyabort
785#define YYACCEPTgoto yyaccept goto yyaccept
786#define YYERRORgoto yyerrlab goto yyerrlab
787int
788yyparseknparse(void)
789{
790 int yym, yyn, yystate;
791#if YYDEBUG0
792 const char *yys;
793
794 if ((yys = getenv("YYDEBUG")))
795 {
796 yyn = *yys;
797 if (yyn >= '0' && yyn <= '9')
798 yydebugkndebug = yyn - '0';
799 }
800#endif /* YYDEBUG */
801
802 yynerrsknnerrs = 0;
803 yyerrflagknerrflag = 0;
804 yycharknchar = (-1);
805
806 if (yyssknss == NULL((void *)0) && yygrowstack()) goto yyoverflow;
1
Assuming 'knss' is not equal to NULL
807 yysspknssp = yyssknss;
808 yyvspknvsp = yyvsknvs;
809 *yysspknssp = yystate = 0;
810
811yyloop:
812 if ((yyn = yydefredkndefred[yystate]) != 0) goto yyreduce;
2
Taking false branch
22
Assuming the condition is true
23
Taking true branch
24
Control jumps to line 919
33
Assuming the condition is true
34
Taking true branch
35
Control jumps to line 919
813 if (yycharknchar < 0)
3
Taking true branch
814 {
815 if ((yycharknchar = yylexknlex()) < 0) yycharknchar = 0;
4
Assuming the condition is false
5
Taking false branch
816#if YYDEBUG0
817 if (yydebugkndebug)
818 {
819 yys = 0;
820 if (yycharknchar <= YYMAXTOKEN299) yys = yynameknname[yycharknchar];
821 if (!yys) yys = "illegal-symbol";
822 printf("%sdebug: state %d, reading %d (%s)\n",
823 YYPREFIX"kn", yystate, yycharknchar, yys);
824 }
825#endif
826 }
827 if ((yyn = yysindexknsindex[yystate]) && (yyn += yycharknchar) >= 0 &&
6
Assuming 'yyn' is not equal to 0
7
Assuming the condition is false
828 yyn <= YYTABLESIZE544 && yycheckkncheck[yyn] == yycharknchar)
829 {
830#if YYDEBUG0
831 if (yydebugkndebug)
832 printf("%sdebug: state %d, shifting to state %d\n",
833 YYPREFIX"kn", yystate, yytablekntable[yyn]);
834#endif
835 if (yysspknssp >= yysslimknsslim && yygrowstack())
836 {
837 goto yyoverflow;
838 }
839 *++yysspknssp = yystate = yytablekntable[yyn];
840 *++yyvspknvsp = yylvalknlval;
841 yycharknchar = (-1);
842 if (yyerrflagknerrflag > 0) --yyerrflagknerrflag;
843 goto yyloop;
844 }
845 if ((yyn = yyrindexknrindex[yystate]) && (yyn += yycharknchar) >= 0 &&
8
Assuming 'yyn' is 0
846 yyn <= YYTABLESIZE544 && yycheckkncheck[yyn] == yycharknchar)
847 {
848 yyn = yytablekntable[yyn];
849 goto yyreduce;
850 }
851 if (yyerrflagknerrflag) goto yyinrecovery;
9
Assuming 'knerrflag' is 0
10
Taking false branch
852#if defined(__GNUC__4)
853 goto yynewerror;
11
Control jumps to line 856
854#endif
855yynewerror:
856 yyerrorknerror("syntax error");
857#if defined(__GNUC__4)
858 goto yyerrlab;
12
Control jumps to line 861
859#endif
860yyerrlab:
861 ++yynerrsknnerrs;
862yyinrecovery:
863 if (yyerrflagknerrflag < 3)
13
Taking true branch
864 {
865 yyerrflagknerrflag = 3;
866 for (;;)
14
Loop condition is true. Entering loop body
867 {
868 if ((yyn = yysindexknsindex[*yysspknssp]) && (yyn += YYERRCODE256) >= 0 &&
15
Assuming 'yyn' is not equal to 0
16
Assuming the condition is true
19
Taking true branch
869 yyn <= YYTABLESIZE544 && yycheckkncheck[yyn] == YYERRCODE256)
17
Assuming 'yyn' is <= YYTABLESIZE
18
Assuming the condition is true
870 {
871#if YYDEBUG0
872 if (yydebugkndebug)
873 printf("%sdebug: state %d, error recovery shifting\
874 to state %d\n", YYPREFIX"kn", *yysspknssp, yytablekntable[yyn]);
875#endif
876 if (yysspknssp >= yysslimknsslim && yygrowstack())
20
Assuming 'knssp' is < 'knsslim'
877 {
878 goto yyoverflow;
879 }
880 *++yysspknssp = yystate = yytablekntable[yyn];
881 *++yyvspknvsp = yylvalknlval;
882 goto yyloop;
21
Control jumps to line 812
883 }
884 else
885 {
886#if YYDEBUG0
887 if (yydebugkndebug)
888 printf("%sdebug: error recovery discarding state %d\n",
889 YYPREFIX"kn", *yysspknssp);
890#endif
891 if (yysspknssp <= yyssknss) goto yyabort;
892 --yysspknssp;
893 --yyvspknvsp;
894 }
895 }
896 }
897 else
898 {
899 if (yycharknchar == 0) goto yyabort;
900#if YYDEBUG0
901 if (yydebugkndebug)
902 {
903 yys = 0;
904 if (yycharknchar <= YYMAXTOKEN299) yys = yynameknname[yycharknchar];
905 if (!yys) yys = "illegal-symbol";
906 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
907 YYPREFIX"kn", yystate, yycharknchar, yys);
908 }
909#endif
910 yycharknchar = (-1);
911 goto yyloop;
912 }
913yyreduce:
914#if YYDEBUG0
915 if (yydebugkndebug)
916 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
917 YYPREFIX"kn", yystate, yyn, yyruleknrule[yyn]);
918#endif
919 yym = yylenknlen[yyn];
920 if (yym)
25
Assuming 'yym' is 0
26
Taking false branch
36
Assuming 'yym' is 0
37
Taking false branch
921 yyvalknval = yyvspknvsp[1-yym];
922 else
923 memset(&yyvalknval, 0, sizeof yyvalknval);
924 switch (yyn)
27
'Default' branch taken. Execution continues on line 1734
38
Control jumps to 'case 85:' at line 1498
925 {
926case 1:
927#line 71 "/usr/src/lib/libkeynote/keynote.y"
928{ keynote_exceptionflag = keynote_donteval = 0; }
929break;
930case 3:
931#line 73 "/usr/src/lib/libkeynote/keynote.y"
932{ keynote_exceptionflag = keynote_donteval = 0; }
933break;
934case 5:
935#line 74 "/usr/src/lib/libkeynote/keynote.y"
936{ keynote_exceptionflag = keynote_donteval = 0; }
937break;
938case 7:
939#line 76 "/usr/src/lib/libkeynote/keynote.y"
940{ keynote_exceptionflag = keynote_donteval = 0; }
941break;
942case 9:
943#line 77 "/usr/src/lib/libkeynote/keynote.y"
944{ keynote_exceptionflag = keynote_donteval = 0; }
945break;
946case 11:
947#line 79 "/usr/src/lib/libkeynote/keynote.y"
948{ keynote_exceptionflag = keynote_donteval = 0; }
949break;
950case 12:
951#line 80 "/usr/src/lib/libkeynote/keynote.y"
952{ keynote_lex_remove(yyvspknvsp[0].string);
953 if (strcmp(yyvspknvsp[0].string, KEYNOTE_VERSION_STRING"2"))
954 keynote_errno = ERROR_SYNTAX-2;
955 free(yyvspknvsp[0].string);
956 }
957break;
958case 13:
959#line 85 "/usr/src/lib/libkeynote/keynote.y"
960{ keynote_exceptionflag = keynote_donteval = 0; }
961break;
962case 14:
963#line 86 "/usr/src/lib/libkeynote/keynote.y"
964{ keynote_lex_remove(yyvspknvsp[0].string);
965 keynote_privkey = yyvspknvsp[0].string;
966 }
967break;
968case 15:
969#line 90 "/usr/src/lib/libkeynote/keynote.y"
970{ keynote_returnvalue = 0;
971 return 0;
972 }
973break;
974case 16:
975#line 93 "/usr/src/lib/libkeynote/keynote.y"
976{ keynote_returnvalue = yyvspknvsp[0].intval;
977 return 0;
978 }
979break;
980case 17:
981#line 97 "/usr/src/lib/libkeynote/keynote.y"
982{ yyvalknval.intval = yyvspknvsp[0].intval; }
983break;
984case 18:
985#line 98 "/usr/src/lib/libkeynote/keynote.y"
986{ yyvalknval.intval = yyvspknvsp[0].intval; }
987break;
988case 19:
989#line 100 "/usr/src/lib/libkeynote/keynote.y"
990{ if ((yyvspknvsp[-1].intval == 0) && !keynote_justrecord)
991 keynote_donteval = 1;
992 }
993break;
994case 20:
995#line 103 "/usr/src/lib/libkeynote/keynote.y"
996{ if (yyvspknvsp[-3].intval > yyvspknvsp[0].intval)
997 yyvalknval.intval = yyvspknvsp[0].intval;
998 else
999 yyvalknval.intval = yyvspknvsp[-3].intval;
1000 keynote_donteval = 0;
1001 }
1002break;
1003case 21:
1004#line 109 "/usr/src/lib/libkeynote/keynote.y"
1005{ if ((yyvspknvsp[-1].intval == (keynote_current_session->ks_values_num - 1)) && !keynote_justrecord)
1006 keynote_donteval = 1;
1007 }
1008break;
1009case 22:
1010#line 112 "/usr/src/lib/libkeynote/keynote.y"
1011{ if (yyvspknvsp[-3].intval >= yyvspknvsp[0].intval)
1012 yyvalknval.intval = yyvspknvsp[-3].intval;
1013 else
1014 yyvalknval.intval = yyvspknvsp[0].intval;
1015 keynote_donteval = 0;
1016 }
1017break;
1018case 23:
1019#line 118 "/usr/src/lib/libkeynote/keynote.y"
1020{ yyvalknval.intval = yyvspknvsp[-1].intval; }
1021break;
1022case 24:
1023#line 119 "/usr/src/lib/libkeynote/keynote.y"
1024{ keylistcount = 0; }
1025break;
1026case 25:
1027#line 119 "/usr/src/lib/libkeynote/keynote.y"
1028{
1029 if (!keynote_justrecord && !keynote_donteval)
1030 if (keynote_init_kth() == -1)
1031 return -1;
1032 }
1033break;
1034case 26:
1035#line 124 "/usr/src/lib/libkeynote/keynote.y"
1036{
1037 if (keylistcount < yyvspknvsp[-5].intval)
1038 {
1039 keynote_errno = ERROR_SYNTAX-2;
1040 return -1;
1041 }
1042
1043 if (!keynote_justrecord && !keynote_donteval)
1044 yyvalknval.intval = get_kth(yyvspknvsp[-5].intval);
1045 else
1046 yyvalknval.intval = 0;
1047 }
1048break;
1049case 27:
1050#line 138 "/usr/src/lib/libkeynote/keynote.y"
1051{ /* Don't do anything if we're just recording */
1052 if (!keynote_justrecord && !keynote_donteval)
1053 if ((yyvspknvsp[0].intval < keynote_current_session->ks_values_num) && (yyvspknvsp[0].intval >= 0))
1054 keynote_kth_array[yyvspknvsp[0].intval]++;
1055
1056 keylistcount++;
1057 }
1058break;
1059case 28:
1060#line 146 "/usr/src/lib/libkeynote/keynote.y"
1061{ /* Don't do anything if we're just recording */
1062 if (!keynote_justrecord && !keynote_donteval)
1063 if ((yyvspknvsp[-2].intval < keynote_current_session->ks_values_num) && (yyvspknvsp[-2].intval >= 0))
1064 keynote_kth_array[yyvspknvsp[-2].intval]++;
1065
1066 keylistcount++;
1067 }
1068break;
1069case 29:
1070#line 154 "/usr/src/lib/libkeynote/keynote.y"
1071{
1072 if (keynote_donteval)
1073 yyvalknval.intval = 0;
1074 else
1075 {
1076 keynote_lex_remove(yyvspknvsp[0].string);
1077 if (keynote_justrecord)
1078 {
1079 if (keynote_keylist_add(&keynote_keypred_keylist,
1080 yyvspknvsp[0].string) == -1)
1081 {
1082 free(yyvspknvsp[0].string);
1083 return -1;
1084 }
1085
1086 yyvalknval.intval = 0;
1087 }
1088 else
1089 switch (keynote_in_action_authorizers(yyvspknvsp[0].string, KEYNOTE_ALGORITHM_UNSPEC-1))
1090 {
1091 case -1:
1092 free(yyvspknvsp[0].string);
1093 return -1;
1094
1095 case RESULT_TRUE1:
1096 free(yyvspknvsp[0].string);
1097 yyvalknval.intval = keynote_current_session->ks_values_num -
1098 1;
1099 break;
1100
1101 default:
1102 yyvalknval.intval = resolve_assertion(yyvspknvsp[0].string);
1103 free(yyvspknvsp[0].string);
1104 break;
1105 }
1106 }
1107 }
1108break;
1109case 32:
1110#line 196 "/usr/src/lib/libkeynote/keynote.y"
1111{
1112 int i;
1113
1114 keynote_lex_remove(yyvspknvsp[-2].string);
1115 keynote_lex_remove(yyvspknvsp[0].string);
1116
1117 /*
1118 * Variable names starting with underscores are illegal here.
1119 */
1120 if (yyvspknvsp[-2].string[0] == '_')
1121 {
1122 free(yyvspknvsp[-2].string);
1123 free(yyvspknvsp[0].string);
1124 keynote_errno = ERROR_SYNTAX-2;
1125 return -1;
1126 }
1127
1128 /* If the identifier already exists, report error. */
1129 if (keynote_env_lookup(yyvspknvsp[-2].string, &keynote_init_list, 1) != NULL((void *)0))
1130 {
1131 free(yyvspknvsp[-2].string);
1132 free(yyvspknvsp[0].string);
1133 keynote_errno = ERROR_SYNTAX-2;
1134 return -1;
1135 }
1136
1137 i = keynote_env_add(yyvspknvsp[-2].string, yyvspknvsp[0].string, &keynote_init_list, 1, 0);
1138 free(yyvspknvsp[-2].string);
1139 free(yyvspknvsp[0].string);
1140
1141 if (i != RESULT_TRUE1)
1142 return -1;
1143 }
1144break;
1145case 33:
1146#line 230 "/usr/src/lib/libkeynote/keynote.y"
1147{
1148 int i;
1149
1150 keynote_lex_remove(yyvspknvsp[-2].string);
1151 keynote_lex_remove(yyvspknvsp[0].string);
1152
1153 /*
1154 * Variable names starting with underscores are illegal here.
1155 */
1156 if (yyvspknvsp[-2].string[0] == '_')
1157 {
1158 free(yyvspknvsp[-2].string);
1159 free(yyvspknvsp[0].string);
1160 keynote_errno = ERROR_SYNTAX-2;
1161 return -1;
1162 }
1163
1164 /* If the identifier already exists, report error. */
1165 if (keynote_env_lookup(yyvspknvsp[-2].string, &keynote_init_list, 1) != NULL((void *)0))
1166 {
1167 free(yyvspknvsp[-2].string);
1168 free(yyvspknvsp[0].string);
1169 keynote_errno = ERROR_SYNTAX-2;
1170 return -1;
1171 }
1172
1173 i = keynote_env_add(yyvspknvsp[-2].string, yyvspknvsp[0].string, &keynote_init_list, 1, 0);
1174 free(yyvspknvsp[-2].string);
1175 free(yyvspknvsp[0].string);
1176
1177 if (i != RESULT_TRUE1)
1178 return -1;
1179 }
1180break;
1181case 35:
1182#line 264 "/usr/src/lib/libkeynote/keynote.y"
1183{
1184 keynote_returnvalue = yyvspknvsp[0].intval;
1185 return 0;
1186 }
1187break;
1188case 36:
1189#line 269 "/usr/src/lib/libkeynote/keynote.y"
1190{ yyvalknval.intval = 0; }
1191break;
1192case 37:
1193#line 270 "/usr/src/lib/libkeynote/keynote.y"
1194{
1195 /*
1196 * Cleanup envlist of additions such as
1197 * regexp results
1198 */
1199 keynote_env_cleanup(&keynote_temp_list, 1);
1200 }
1201break;
1202case 38:
1203#line 277 "/usr/src/lib/libkeynote/keynote.y"
1204{
1205 if (yyvspknvsp[-3].intval > yyvspknvsp[0].intval)
1206 yyvalknval.intval = yyvspknvsp[-3].intval;
1207 else
1208 yyvalknval.intval = yyvspknvsp[0].intval;
1209 }
1210break;
1211case 39:
1212#line 285 "/usr/src/lib/libkeynote/keynote.y"
1213{
1214 if (checkexception(yyvspknvsp[-2].bool))
1215 yyvalknval.intval = yyvspknvsp[0].intval;
1216 else
1217 yyvalknval.intval = 0;
1218 }
1219break;
1220case 40:
1221#line 292 "/usr/src/lib/libkeynote/keynote.y"
1222{
1223 if (checkexception(yyvspknvsp[0].bool))
1224 yyvalknval.intval = keynote_current_session->ks_values_num - 1;
1225 else
1226 yyvalknval.intval = 0;
1227 }
1228break;
1229case 41:
1230#line 299 "/usr/src/lib/libkeynote/keynote.y"
1231{ if (keynote_exceptionflag || keynote_donteval)
1232 yyvalknval.intval = 0;
1233 else
1234 {
1235 keynote_lex_remove(yyvspknvsp[0].string);
1236
1237 yyvalknval.intval = keynote_retindex(yyvspknvsp[0].string);
1238 if (yyvalknval.intval == -1) /* Invalid return value */
1239 yyvalknval.intval = 0;
1240
1241 free(yyvspknvsp[0].string);
1242 }
1243 }
1244break;
1245case 42:
1246#line 312 "/usr/src/lib/libkeynote/keynote.y"
1247{ yyvalknval.intval = yyvspknvsp[-1].intval; }
1248break;
1249case 43:
1250#line 315 "/usr/src/lib/libkeynote/keynote.y"
1251{ yyvalknval.bool = yyvspknvsp[-1].bool; }
1252break;
1253case 44:
1254#line 316 "/usr/src/lib/libkeynote/keynote.y"
1255{ if (yyvspknvsp[-1].bool == 0)
1256 keynote_donteval = 1;
1257 }
1258break;
1259case 45:
1260#line 318 "/usr/src/lib/libkeynote/keynote.y"
1261{ yyvalknval.bool = (yyvspknvsp[-3].bool && yyvspknvsp[0].bool);
1262 keynote_donteval = 0;
1263 }
1264break;
1265case 46:
1266#line 321 "/usr/src/lib/libkeynote/keynote.y"
1267{ if (yyvspknvsp[-1].bool)
1268 keynote_donteval = 1;
1269 }
1270break;
1271case 47:
1272#line 323 "/usr/src/lib/libkeynote/keynote.y"
1273{ yyvalknval.bool = (yyvspknvsp[-3].bool || yyvspknvsp[0].bool);
1274 keynote_donteval = 0;
1275 }
1276break;
1277case 48:
1278#line 326 "/usr/src/lib/libkeynote/keynote.y"
1279{ yyvalknval.bool = !(yyvspknvsp[0].bool); }
1280break;
1281case 49:
1282#line 327 "/usr/src/lib/libkeynote/keynote.y"
1283{ yyvalknval.bool = yyvspknvsp[0].bool; }
1284break;
1285case 50:
1286#line 328 "/usr/src/lib/libkeynote/keynote.y"
1287{ yyvalknval.bool = yyvspknvsp[0].bool; }
1288break;
1289case 51:
1290#line 329 "/usr/src/lib/libkeynote/keynote.y"
1291{ yyvalknval.bool = yyvspknvsp[0].bool; }
1292break;
1293case 52:
1294#line 330 "/usr/src/lib/libkeynote/keynote.y"
1295{ yyvalknval.bool = 1; }
1296break;
1297case 53:
1298#line 331 "/usr/src/lib/libkeynote/keynote.y"
1299{ yyvalknval.bool = 0; }
1300break;
1301case 54:
1302#line 333 "/usr/src/lib/libkeynote/keynote.y"
1303{ yyvalknval.bool = yyvspknvsp[-2].intval < yyvspknvsp[0].intval; }
1304break;
1305case 55:
1306#line 334 "/usr/src/lib/libkeynote/keynote.y"
1307{ yyvalknval.bool = yyvspknvsp[-2].intval > yyvspknvsp[0].intval; }
1308break;
1309case 56:
1310#line 335 "/usr/src/lib/libkeynote/keynote.y"
1311{ yyvalknval.bool = yyvspknvsp[-2].intval == yyvspknvsp[0].intval; }
1312break;
1313case 57:
1314#line 336 "/usr/src/lib/libkeynote/keynote.y"
1315{ yyvalknval.bool = yyvspknvsp[-2].intval <= yyvspknvsp[0].intval; }
1316break;
1317case 58:
1318#line 337 "/usr/src/lib/libkeynote/keynote.y"
1319{ yyvalknval.bool = yyvspknvsp[-2].intval >= yyvspknvsp[0].intval; }
1320break;
1321case 59:
1322#line 338 "/usr/src/lib/libkeynote/keynote.y"
1323{ yyvalknval.bool = yyvspknvsp[-2].intval != yyvspknvsp[0].intval; }
1324break;
1325case 60:
1326#line 340 "/usr/src/lib/libkeynote/keynote.y"
1327{ yyvalknval.bool = yyvspknvsp[-2].doubval < yyvspknvsp[0].doubval; }
1328break;
1329case 61:
1330#line 341 "/usr/src/lib/libkeynote/keynote.y"
1331{ yyvalknval.bool = yyvspknvsp[-2].doubval > yyvspknvsp[0].doubval; }
1332break;
1333case 62:
1334#line 342 "/usr/src/lib/libkeynote/keynote.y"
1335{ yyvalknval.bool = yyvspknvsp[-2].doubval <= yyvspknvsp[0].doubval; }
1336break;
1337case 63:
1338#line 343 "/usr/src/lib/libkeynote/keynote.y"
1339{ yyvalknval.bool = yyvspknvsp[-2].doubval >= yyvspknvsp[0].doubval; }
1340break;
1341case 64:
1342#line 345 "/usr/src/lib/libkeynote/keynote.y"
1343{ yyvalknval.intval = yyvspknvsp[-2].intval + yyvspknvsp[0].intval; }
1344break;
1345case 65:
1346#line 346 "/usr/src/lib/libkeynote/keynote.y"
1347{ yyvalknval.intval = yyvspknvsp[-2].intval - yyvspknvsp[0].intval; }
1348break;
1349case 66:
1350#line 347 "/usr/src/lib/libkeynote/keynote.y"
1351{ yyvalknval.intval = yyvspknvsp[-2].intval * yyvspknvsp[0].intval; }
1352break;
1353case 67:
1354#line 348 "/usr/src/lib/libkeynote/keynote.y"
1355{ if (yyvspknvsp[0].intval == 0)
1356 {
1357 if (!keynote_donteval)
1358 keynote_exceptionflag = 1;
1359 }
1360 else
1361 yyvalknval.intval = (yyvspknvsp[-2].intval / yyvspknvsp[0].intval);
1362 }
1363break;
1364case 68:
1365#line 356 "/usr/src/lib/libkeynote/keynote.y"
1366{ if (yyvspknvsp[0].intval == 0)
1367 {
1368 if (!keynote_donteval)
1369 keynote_exceptionflag = 1;
1370 }
1371 else
1372 yyvalknval.intval = yyvspknvsp[-2].intval % yyvspknvsp[0].intval;
1373 }
1374break;
1375case 69:
1376#line 364 "/usr/src/lib/libkeynote/keynote.y"
1377{ yyvalknval.intval = intpow(yyvspknvsp[-2].intval, yyvspknvsp[0].intval); }
1378break;
1379case 70:
1380#line 365 "/usr/src/lib/libkeynote/keynote.y"
1381{ yyvalknval.intval = -(yyvspknvsp[0].intval); }
1382break;
1383case 71:
1384#line 366 "/usr/src/lib/libkeynote/keynote.y"
1385{ yyvalknval.intval = yyvspknvsp[-1].intval; }
1386break;
1387case 72:
1388#line 367 "/usr/src/lib/libkeynote/keynote.y"
1389{ yyvalknval.intval = yyvspknvsp[0].intval; }
1390break;
1391case 73:
1392#line 368 "/usr/src/lib/libkeynote/keynote.y"
1393{ if (keynote_exceptionflag ||
1394 keynote_donteval)
1395 yyvalknval.intval = 0;
1396 else
1397 {
1398 keynote_lex_remove(yyvspknvsp[0].string);
1399
1400 if (!isfloatstring(yyvspknvsp[0].string))
1401 yyvalknval.intval = 0;
1402 else
1403 yyvalknval.intval = (int) floor(atof(yyvspknvsp[0].string));
1404 free(yyvspknvsp[0].string);
1405 }
1406 }
1407break;
1408case 74:
1409#line 383 "/usr/src/lib/libkeynote/keynote.y"
1410{ yyvalknval.doubval = (yyvspknvsp[-2].doubval + yyvspknvsp[0].doubval); }
1411break;
1412case 75:
1413#line 384 "/usr/src/lib/libkeynote/keynote.y"
1414{ yyvalknval.doubval = (yyvspknvsp[-2].doubval - yyvspknvsp[0].doubval); }
1415break;
1416case 76:
1417#line 385 "/usr/src/lib/libkeynote/keynote.y"
1418{ yyvalknval.doubval = (yyvspknvsp[-2].doubval * yyvspknvsp[0].doubval); }
1419break;
1420case 77:
1421#line 386 "/usr/src/lib/libkeynote/keynote.y"
1422{ if (yyvspknvsp[0].doubval == 0)
1423 {
1424 if (!keynote_donteval)
1425 keynote_exceptionflag = 1;
1426 }
1427 else
1428 yyvalknval.doubval = (yyvspknvsp[-2].doubval / yyvspknvsp[0].doubval);
1429 }
1430break;
1431case 78:
1432#line 394 "/usr/src/lib/libkeynote/keynote.y"
1433{ if (!keynote_exceptionflag &&
1434 !keynote_donteval)
1435 yyvalknval.doubval = pow(yyvspknvsp[-2].doubval, yyvspknvsp[0].doubval);
1436 }
1437break;
1438case 79:
1439#line 398 "/usr/src/lib/libkeynote/keynote.y"
1440{ yyvalknval.doubval = -(yyvspknvsp[0].doubval); }
1441break;
1442case 80:
1443#line 399 "/usr/src/lib/libkeynote/keynote.y"
1444{ yyvalknval.doubval = yyvspknvsp[-1].doubval; }
1445break;
1446case 81:
1447#line 400 "/usr/src/lib/libkeynote/keynote.y"
1448{ yyvalknval.doubval = yyvspknvsp[0].doubval; }
1449break;
1450case 82:
1451#line 401 "/usr/src/lib/libkeynote/keynote.y"
1452{
1453 if (keynote_exceptionflag ||
1454 keynote_donteval)
1455 yyvalknval.doubval = 0.0;
1456 else
1457 {
1458 keynote_lex_remove(yyvspknvsp[0].string);
1459
1460 if (!isfloatstring(yyvspknvsp[0].string))
1461 yyvalknval.doubval = 0.0;
1462 else
1463 yyvalknval.doubval = atof(yyvspknvsp[0].string);
1464 free(yyvspknvsp[0].string);
1465 }
1466 }
1467break;
1468case 83:
1469#line 417 "/usr/src/lib/libkeynote/keynote.y"
1470{
1471 if (keynote_exceptionflag || keynote_donteval)
1472 yyvalknval.bool = 0;
1473 else
1474 {
1475 yyvalknval.bool = strcmp(yyvspknvsp[-2].string, yyvspknvsp[0].string) == 0 ? 1 : 0;
1476 keynote_lex_remove(yyvspknvsp[-2].string);
1477 keynote_lex_remove(yyvspknvsp[0].string);
1478 free(yyvspknvsp[-2].string);
1479 free(yyvspknvsp[0].string);
1480 }
1481 }
1482break;
1483case 84:
1484#line 429 "/usr/src/lib/libkeynote/keynote.y"
1485{
1486 if (keynote_exceptionflag || keynote_donteval)
1487 yyvalknval.bool = 0;
1488 else
1489 {
1490 yyvalknval.bool = strcmp(yyvspknvsp[-2].string, yyvspknvsp[0].string) != 0 ? 1 : 0;
1491 keynote_lex_remove(yyvspknvsp[-2].string);
1492 keynote_lex_remove(yyvspknvsp[0].string);
1493 free(yyvspknvsp[-2].string);
1494 free(yyvspknvsp[0].string);
1495 }
1496 }
1497break;
1498case 85:
1499#line 441 "/usr/src/lib/libkeynote/keynote.y"
1500{
1501 if (keynote_exceptionflag || keynote_donteval)
39
Assuming 'keynote_exceptionflag' is 0
40
Assuming 'keynote_donteval' is 0
41
Taking false branch
1502 yyvalknval.bool = 0;
1503 else
1504 {
1505 yyvalknval.bool = strcmp(yyvspknvsp[-2].string, yyvspknvsp[0].string) < 0 ? 1 : 0;
42
Null pointer passed as 2nd argument to string comparison function
1506 keynote_lex_remove(yyvspknvsp[-2].string);
1507 keynote_lex_remove(yyvspknvsp[0].string);
1508 free(yyvspknvsp[-2].string);
1509 free(yyvspknvsp[0].string);
1510 }
1511 }
1512break;
1513case 86:
1514#line 453 "/usr/src/lib/libkeynote/keynote.y"
1515{
1516 if (keynote_exceptionflag || keynote_donteval)
1517 yyvalknval.bool = 0;
1518 else
1519 {
1520 yyvalknval.bool = strcmp(yyvspknvsp[-2].string, yyvspknvsp[0].string) > 0 ? 1 : 0;
1521 keynote_lex_remove(yyvspknvsp[-2].string);
1522 keynote_lex_remove(yyvspknvsp[0].string);
1523 free(yyvspknvsp[-2].string);
1524 free(yyvspknvsp[0].string);
1525 }
1526 }
1527break;
1528case 87:
1529#line 465 "/usr/src/lib/libkeynote/keynote.y"
1530{
1531 if (keynote_exceptionflag || keynote_donteval)
1532 yyvalknval.bool = 0;
1533 else
1534 {
1535 yyvalknval.bool = strcmp(yyvspknvsp[-2].string, yyvspknvsp[0].string) <= 0 ? 1 : 0;
1536 keynote_lex_remove(yyvspknvsp[-2].string);
1537 keynote_lex_remove(yyvspknvsp[0].string);
1538 free(yyvspknvsp[-2].string);
1539 free(yyvspknvsp[0].string);
1540 }
1541 }
1542break;
1543case 88:
1544#line 477 "/usr/src/lib/libkeynote/keynote.y"
1545{
1546 if (keynote_exceptionflag || keynote_donteval)
1547 yyvalknval.bool = 0;
1548 else
1549 {
1550 yyvalknval.bool = strcmp(yyvspknvsp[-2].string, yyvspknvsp[0].string) >= 0 ? 1 : 0;
1551 keynote_lex_remove(yyvspknvsp[-2].string);
1552 keynote_lex_remove(yyvspknvsp[0].string);
1553 free(yyvspknvsp[-2].string);
1554 free(yyvspknvsp[0].string);
1555 }
1556 }
1557break;
1558case 89:
1559#line 490 "/usr/src/lib/libkeynote/keynote.y"
1560{
1561 regmatch_t pmatch[32];
1562 char grp[10], *gr;
1563 regex_t preg;
1564 int i;
1565
1566 if (keynote_exceptionflag || keynote_donteval)
1567 yyvalknval.bool = 0;
1568 else
1569 {
1570 keynote_lex_remove(yyvspknvsp[-2].string);
1571 keynote_lex_remove(yyvspknvsp[0].string);
1572
1573 memset(pmatch, 0, sizeof(pmatch));
1574 memset(grp, 0, sizeof(grp));
1575
1576 if (regcomp(&preg, yyvspknvsp[0].string, REG_EXTENDED0001))
1577 {
1578 free(yyvspknvsp[-2].string);
1579 free(yyvspknvsp[0].string);
1580 keynote_exceptionflag = 1;
1581 }
1582 else
1583 {
1584 /* Clean-up residuals from previous regexps */
1585 keynote_env_cleanup(&keynote_temp_list, 1);
1586
1587 free(yyvspknvsp[0].string);
1588 i = regexec(&preg, yyvspknvsp[-2].string, 32, pmatch, 0);
1589 yyvalknval.bool = (i == 0 ? 1 : 0);
1590 if (i == 0)
1591 {
1592 snprintf(grp, sizeof grp, "%lu",
1593 (unsigned long)preg.re_nsub);
1594 if (keynote_env_add("_0", grp, &keynote_temp_list,
1595 1, 0) != RESULT_TRUE1)
1596 {
1597 free(yyvspknvsp[-2].string);
1598 regfree(&preg);
1599 return -1;
1600 }
1601
1602 for (i = 1; i < 32 && pmatch[i].rm_so != -1; i++)
1603 {
1604 gr = calloc(pmatch[i].rm_eo - pmatch[i].rm_so +
1605 1, sizeof(char));
1606 if (gr == NULL((void *)0))
1607 {
1608 free(yyvspknvsp[-2].string);
1609 regfree(&preg);
1610 keynote_errno = ERROR_MEMORY-1;
1611 return -1;
1612 }
1613
1614 strncpy(gr, yyvspknvsp[-2].string + pmatch[i].rm_so,
1615 pmatch[i].rm_eo - pmatch[i].rm_so);
1616 gr[pmatch[i].rm_eo - pmatch[i].rm_so] = '\0';
1617 snprintf(grp, sizeof grp, "_%d", i);
1618 if (keynote_env_add(grp, gr, &keynote_temp_list,
1619 1, 0) == -1)
1620 {
1621 free(yyvspknvsp[-2].string);
1622 regfree(&preg);
1623 free(gr);
1624 return -1;
1625 }
1626 else
1627 free(gr);
1628 }
1629 }
1630
1631 regfree(&preg);
1632 free(yyvspknvsp[-2].string);
1633 }
1634 }
1635 }
1636break;
1637case 90:
1638#line 567 "/usr/src/lib/libkeynote/keynote.y"
1639{ if (keynote_exceptionflag || keynote_donteval)
1640 yyvalknval.string = NULL((void *)0);
1641 else
1642 {
1643 int len = strlen(yyvspknvsp[-2].string) + strlen(yyvspknvsp[0].string) + 1;
1644 yyvalknval.string = calloc(len, sizeof(char));
1645 keynote_lex_remove(yyvspknvsp[-2].string);
1646 keynote_lex_remove(yyvspknvsp[0].string);
1647 if (yyvalknval.string == NULL((void *)0))
1648 {
1649 free(yyvspknvsp[-2].string);
1650 free(yyvspknvsp[0].string);
1651 keynote_errno = ERROR_MEMORY-1;
1652 return -1;
1653 }
1654 snprintf(yyvalknval.string, len, "%s%s", yyvspknvsp[-2].string, yyvspknvsp[0].string);
1655 free(yyvspknvsp[-2].string);
1656 free(yyvspknvsp[0].string);
1657 if (keynote_lex_add(yyvalknval.string, LEXTYPE_CHAR0x1) == -1)
1658 return -1;
1659 }
1660 }
1661break;
1662case 91:
1663#line 589 "/usr/src/lib/libkeynote/keynote.y"
1664{ yyvalknval.string = yyvspknvsp[0].string; }
1665break;
1666case 92:
1667#line 591 "/usr/src/lib/libkeynote/keynote.y"
1668{ yyvalknval.string = yyvspknvsp[0].string; }
1669break;
1670case 93:
1671#line 592 "/usr/src/lib/libkeynote/keynote.y"
1672{ yyvalknval.string = yyvspknvsp[-1].string; }
1673break;
1674case 94:
1675#line 593 "/usr/src/lib/libkeynote/keynote.y"
1676{ if (keynote_exceptionflag || keynote_donteval)
1677 yyvalknval.string = NULL((void *)0);
1678 else
1679 {
1680 yyvalknval.string = my_lookup(yyvspknvsp[0].string);
1681 keynote_lex_remove(yyvspknvsp[0].string);
1682 free(yyvspknvsp[0].string);
1683 if (yyvalknval.string == NULL((void *)0))
1684 {
1685 if (keynote_errno)
1686 return -1;
1687 yyvalknval.string = strdup("");
1688 }
1689 else
1690 yyvalknval.string = strdup(yyvalknval.string);
1691
1692 if (yyvalknval.string == NULL((void *)0))
1693 {
1694 keynote_errno = ERROR_MEMORY-1;
1695 return -1;
1696 }
1697
1698 if (keynote_lex_add(yyvalknval.string, LEXTYPE_CHAR0x1) == -1)
1699 return -1;
1700 }
1701 }
1702break;
1703case 95:
1704#line 619 "/usr/src/lib/libkeynote/keynote.y"
1705{ if (keynote_exceptionflag || keynote_donteval)
1706 yyvalknval.string = NULL((void *)0);
1707 else
1708 {
1709 yyvalknval.string = my_lookup(yyvspknvsp[0].string);
1710 keynote_lex_remove(yyvspknvsp[0].string);
1711 free(yyvspknvsp[0].string);
1712 if (yyvalknval.string == NULL((void *)0))
1713 {
1714 if (keynote_errno)
1715 return -1;
1716 yyvalknval.string = strdup("");
1717 }
1718 else
1719 yyvalknval.string = strdup(yyvalknval.string);
1720
1721 if (yyvalknval.string == NULL((void *)0))
1722 {
1723 keynote_errno = ERROR_MEMORY-1;
1724 return -1;
1725 }
1726
1727 if (keynote_lex_add(yyvalknval.string, LEXTYPE_CHAR0x1) == -1)
1728 return -1;
1729 }
1730 }
1731break;
1732#line 1725 "k.tab.c"
1733 }
1734 yysspknssp -= yym;
1735 yystate = *yysspknssp;
1736 yyvspknvsp -= yym;
1737 yym = yylhsknlhs[yyn];
1738 if (yystate == 0 && yym == 0)
28
Assuming 'yystate' is not equal to 0
1739 {
1740#if YYDEBUG0
1741 if (yydebugkndebug)
1742 printf("%sdebug: after reduction, shifting from state 0 to\
1743 state %d\n", YYPREFIX"kn", YYFINAL8);
1744#endif
1745 yystate = YYFINAL8;
1746 *++yysspknssp = YYFINAL8;
1747 *++yyvspknvsp = yyvalknval;
1748 if (yycharknchar < 0)
1749 {
1750 if ((yycharknchar = yylexknlex()) < 0) yycharknchar = 0;
1751#if YYDEBUG0
1752 if (yydebugkndebug)
1753 {
1754 yys = 0;
1755 if (yycharknchar <= YYMAXTOKEN299) yys = yynameknname[yycharknchar];
1756 if (!yys) yys = "illegal-symbol";
1757 printf("%sdebug: state %d, reading %d (%s)\n",
1758 YYPREFIX"kn", YYFINAL8, yycharknchar, yys);
1759 }
1760#endif
1761 }
1762 if (yycharknchar == 0) goto yyaccept;
1763 goto yyloop;
1764 }
1765 if ((yyn = yygindexkngindex[yym]) && (yyn += yystate) >= 0 &&
29
Assuming 'yyn' is 0
1766 yyn <= YYTABLESIZE544 && yycheckkncheck[yyn] == yystate)
1767 yystate = yytablekntable[yyn];
1768 else
1769 yystate = yydgotokndgoto[yym];
1770#if YYDEBUG0
1771 if (yydebugkndebug)
1772 printf("%sdebug: after reduction, shifting from state %d \
1773to state %d\n", YYPREFIX"kn", *yysspknssp, yystate);
1774#endif
1775 if (yysspknssp >= yysslimknsslim && yygrowstack())
30
Assuming 'knssp' is < 'knsslim'
1776 {
1777 goto yyoverflow;
1778 }
1779 *++yysspknssp = yystate;
1780 *++yyvspknvsp = yyvalknval;
31
Null pointer value stored to field 'string'
1781 goto yyloop;
32
Control jumps to line 812
1782yyoverflow:
1783 yyerrorknerror("yacc stack overflow");
1784yyabort:
1785 if (yyssknss)
1786 free(yyssknss);
1787 if (yyvsknvs)
1788 free(yyvsknvs);
1789 yyssknss = yysspknssp = NULL((void *)0);
1790 yyvsknvs = yyvspknvsp = NULL((void *)0);
1791 yystacksizeknstacksize = 0;
1792 return (1);
1793yyaccept:
1794 if (yyssknss)
1795 free(yyssknss);
1796 if (yyvsknvs)
1797 free(yyvsknvs);
1798 yyssknss = yysspknssp = NULL((void *)0);
1799 yyvsknvs = yyvspknvsp = NULL((void *)0);
1800 yystacksizeknstacksize = 0;
1801 return (0);
1802}