Bug Summary

File:src/sbin/wsconsctl/obj/map_parse.c
Warning:line 268, column 13
Attempt to free released memory

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 map_parse.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/sbin/wsconsctl/obj -resource-dir /usr/local/lib/clang/13.0.0 -I /usr/src/sbin/wsconsctl -I . -internal-isystem /usr/local/lib/clang/13.0.0/include -internal-externc-isystem /usr/include -O2 -fdebug-compilation-dir=/usr/src/sbin/wsconsctl/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 map_parse.c
1#include <stdlib.h>
2#include <string.h>
3#define YYBYACC1 1
4#define YYMAJOR1 1
5#define YYMINOR9 9
6#define YYLEXyylex() yylex()
7#define YYEMPTY-1 -1
8#define yyclearin(yychar=(-1)) (yychar=(YYEMPTY-1))
9#define yyerrok(yyerrflag=0) (yyerrflag=0)
10#define YYRECOVERING()(yyerrflag!=0) (yyerrflag!=0)
11#define YYPREFIX"yy" "yy"
12#line 50 "/usr/src/sbin/wsconsctl/map_parse.y"
13
14#include <sys/time.h>
15#include <dev/wscons/wsksymdef.h>
16#include <dev/wscons/wsconsio.h>
17#include <err.h>
18#include "wsconsctl.h"
19
20extern struct wskbd_map_data kbmap; /* from keyboard.c */
21
22static struct wscons_keymap mapdata[KS_NUMKEYCODES0x1000];
23struct wskbd_map_data newkbmap; /* used in util.c */
24static struct wscons_keymap *cur_mp;
25
26static int ksym_lookup(keysym_t);
27
28static int
29ksym_lookup(keysym_t ksym)
30{
31 int i;
32 struct wscons_keymap *mp;
33
34 for (i = 0; i < kbmap.maplen; i++) {
35 mp = kbmap.map + i;
36 if (mp->command == ksym ||
37 mp->group1[0] == ksym || mp->group1[1] == ksym ||
38 mp->group2[0] == ksym || mp->group2[1] == ksym)
39 return(i);
40 }
41
42 errx(1, "keysym %s not found", ksym2name(ksym));
43}
44
45#line 84 "/usr/src/sbin/wsconsctl/map_parse.y"
46#ifndef YYSTYPE_DEFINED
47#define YYSTYPE_DEFINED
48typedef union {
49 keysym_t kval;
50 int ival;
51 } YYSTYPE;
52#endif /* YYSTYPE_DEFINED */
53#line 54 "map_parse.c"
54#define T_KEYSYM257 257
55#define T_KEYCODE258 258
56#define T_KEYSYM_VAR259 259
57#define T_KEYSYM_CMD_VAR260 260
58#define T_NUMBER261 261
59#define YYERRCODE256 256
60const short yylhs[] =
61 { -1,
62 3, 0, 2, 2, 4, 4, 5, 8, 6, 7,
63 7, 9, 9, 9, 9, 1, 1,
64};
65const short yylen[] =
66 { 2,
67 0, 2, 1, 2, 1, 1, 4, 0, 6, 0,
68 1, 1, 2, 3, 4, 1, 1,
69};
70const short yydefred[] =
71 { 1,
72 0, 0, 0, 0, 0, 3, 5, 6, 16, 17,
73 0, 0, 4, 0, 8, 7, 0, 11, 0, 0,
74 9, 0, 0, 15,
75};
76const short yydgoto[] =
77 { 1,
78 11, 5, 2, 6, 7, 8, 19, 17, 21,
79};
80const short yysindex[] =
81 { 0,
82 0, -242, -255, -261, -242, 0, 0, 0, 0, 0,
83 -52, -48, 0, -255, 0, 0, -243, 0, -255, -255,
84 0, -255, -255, 0,};
85const short yyrindex[] =
86 { 0,
87 0, 0, 0, 0, 18, 0, 0, 0, 0, 0,
88 0, 0, 0, 0, 0, 0, -247, 0, 0, 1,
89 0, 3, 5, 0,};
90const short yygindex[] =
91 { 0,
92 -12, 0, 0, 14, 0, 0, 0, 0, 0,
93};
94#define YYTABLESIZE263 263
95const short yytable[] =
96 { 12,
97 12, 16, 13, 9, 14, 10, 20, 22, 14, 23,
98 24, 10, 15, 10, 3, 4, 18, 2, 13, 0,
99 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
100 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
101 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
102 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
103 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
104 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
105 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
106 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
107 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
109 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
110 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
111 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
112 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
113 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
114 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
115 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
116 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
117 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
118 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
119 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
120 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
121 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
122 0, 0, 0, 0, 0, 0, 0, 12, 12, 13,
123 13, 14, 14,
124};
125const short yycheck[] =
126 { 261,
127 0, 14, 0, 259, 0, 261, 19, 20, 61, 22,
128 23, 259, 61, 261, 257, 258, 260, 0, 5, -1,
129 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
130 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
131 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
132 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
133 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
134 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
135 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
136 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
137 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
138 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
139 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
140 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
141 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
142 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
143 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
144 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
145 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
146 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
147 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
148 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
149 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
150 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
151 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
152 -1, -1, -1, -1, -1, -1, -1, 257, 258, 257,
153 258, 257, 258,
154};
155#define YYFINAL1 1
156#ifndef YYDEBUG0
157#define YYDEBUG0 0
158#endif
159#define YYMAXTOKEN261 261
160#if YYDEBUG0
161const char * const yyname[] =
162 {
163"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,
1640,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,
1650,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,
1660,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,
1670,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,
1680,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,
1690,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"T_KEYSYM","T_KEYCODE",
170"T_KEYSYM_VAR","T_KEYSYM_CMD_VAR","T_NUMBER",
171};
172const char * const yyrule[] =
173 {"$accept : program",
174"$$1 :",
175"program : $$1 expr_list",
176"expr_list : expr",
177"expr_list : expr_list expr",
178"expr : keysym_expr",
179"expr : keycode_expr",
180"keysym_expr : T_KEYSYM keysym_var '=' keysym_var",
181"$$2 :",
182"keycode_expr : T_KEYCODE T_NUMBER '=' $$2 keysym_cmd keysym_list",
183"keysym_cmd :",
184"keysym_cmd : T_KEYSYM_CMD_VAR",
185"keysym_list : keysym_var",
186"keysym_list : keysym_var keysym_var",
187"keysym_list : keysym_var keysym_var keysym_var",
188"keysym_list : keysym_var keysym_var keysym_var keysym_var",
189"keysym_var : T_KEYSYM_VAR",
190"keysym_var : T_NUMBER",
191};
192#endif
193#ifdef YYSTACKSIZE10000
194#undef YYMAXDEPTH10000
195#define YYMAXDEPTH10000 YYSTACKSIZE10000
196#else
197#ifdef YYMAXDEPTH10000
198#define YYSTACKSIZE10000 YYMAXDEPTH10000
199#else
200#define YYSTACKSIZE10000 10000
201#define YYMAXDEPTH10000 10000
202#endif
203#endif
204#define YYINITSTACKSIZE200 200
205/* LINTUSED */
206int yydebug;
207int yynerrs;
208int yyerrflag;
209int yychar;
210short *yyssp;
211YYSTYPE *yyvsp;
212YYSTYPE yyval;
213YYSTYPE yylval;
214short *yyss;
215short *yysslim;
216YYSTYPE *yyvs;
217unsigned int yystacksize;
218int yyparse(void);
219#line 193 "/usr/src/sbin/wsconsctl/map_parse.y"
220
221void
222yyerror(char *msg)
223{
224 errx(1, "parse: %s", msg);
225}
226#line 219 "map_parse.c"
227/* allocate initial stack or double stack size, up to YYMAXDEPTH */
228static int yygrowstack(void)
229{
230 unsigned int newsize;
231 long sslen;
232 short *newss;
233 YYSTYPE *newvs;
234
235 if ((newsize = yystacksize) == 0)
3
Assuming the condition is false
4
Taking false branch
236 newsize = YYINITSTACKSIZE200;
237 else if (newsize >= YYMAXDEPTH10000)
5
Assuming 'newsize' is < YYMAXDEPTH
6
Taking false branch
238 return -1;
239 else if ((newsize *= 2) > YYMAXDEPTH10000)
7
Assuming the condition is false
8
Taking false branch
240 newsize = YYMAXDEPTH10000;
241 sslen = yyssp - yyss;
242#ifdef SIZE_MAX
243#define YY_SIZE_MAX0xffffffffU SIZE_MAX
244#else
245#define YY_SIZE_MAX0xffffffffU 0xffffffffU
246#endif
247 if (newsize && YY_SIZE_MAX0xffffffffU / newsize < sizeof *newss)
9
Assuming 'newsize' is 0
248 goto bail;
249 newss = (short *)realloc(yyss, newsize * sizeof *newss);
250 if (newss == NULL((void *)0))
10
Assuming 'newss' is not equal to NULL
11
Taking false branch
251 goto bail;
252 yyss = newss;
253 yyssp = newss + sslen;
254 if (newsize
11.1
'newsize' is 0
&& YY_SIZE_MAX0xffffffffU / newsize < sizeof *newvs)
255 goto bail;
256 newvs = (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs);
12
Memory is released
257 if (newvs == NULL((void *)0))
13
Assuming 'newvs' is equal to NULL
14
Taking true branch
258 goto bail;
15
Control jumps to line 265
259 yyvs = newvs;
260 yyvsp = newvs + sslen;
261 yystacksize = newsize;
262 yysslim = yyss + newsize - 1;
263 return 0;
264bail:
265 if (yyss
15.1
'yyss' is non-null
)
16
Taking true branch
266 free(yyss);
267 if (yyvs)
17
Assuming 'yyvs' is non-null
18
Taking true branch
268 free(yyvs);
19
Attempt to free released memory
269 yyss = yyssp = NULL((void *)0);
270 yyvs = yyvsp = NULL((void *)0);
271 yystacksize = 0;
272 return -1;
273}
274
275#define YYABORTgoto yyabort goto yyabort
276#define YYREJECTgoto yyabort goto yyabort
277#define YYACCEPTgoto yyaccept goto yyaccept
278#define YYERRORgoto yyerrlab goto yyerrlab
279int
280yyparse(void)
281{
282 int yym, yyn, yystate;
283#if YYDEBUG0
284 const char *yys;
285
286 if ((yys = getenv("YYDEBUG")))
287 {
288 yyn = *yys;
289 if (yyn >= '0' && yyn <= '9')
290 yydebug = yyn - '0';
291 }
292#endif /* YYDEBUG */
293
294 yynerrs = 0;
295 yyerrflag = 0;
296 yychar = (-1);
297
298 if (yyss == NULL((void *)0) && yygrowstack()) goto yyoverflow;
1
Assuming 'yyss' is equal to NULL
2
Calling 'yygrowstack'
299 yyssp = yyss;
300 yyvsp = yyvs;
301 *yyssp = yystate = 0;
302
303yyloop:
304 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
305 if (yychar < 0)
306 {
307 if ((yychar = yylex()) < 0) yychar = 0;
308#if YYDEBUG0
309 if (yydebug)
310 {
311 yys = 0;
312 if (yychar <= YYMAXTOKEN261) yys = yyname[yychar];
313 if (!yys) yys = "illegal-symbol";
314 printf("%sdebug: state %d, reading %d (%s)\n",
315 YYPREFIX"yy", yystate, yychar, yys);
316 }
317#endif
318 }
319 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
320 yyn <= YYTABLESIZE263 && yycheck[yyn] == yychar)
321 {
322#if YYDEBUG0
323 if (yydebug)
324 printf("%sdebug: state %d, shifting to state %d\n",
325 YYPREFIX"yy", yystate, yytable[yyn]);
326#endif
327 if (yyssp >= yysslim && yygrowstack())
328 {
329 goto yyoverflow;
330 }
331 *++yyssp = yystate = yytable[yyn];
332 *++yyvsp = yylval;
333 yychar = (-1);
334 if (yyerrflag > 0) --yyerrflag;
335 goto yyloop;
336 }
337 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
338 yyn <= YYTABLESIZE263 && yycheck[yyn] == yychar)
339 {
340 yyn = yytable[yyn];
341 goto yyreduce;
342 }
343 if (yyerrflag) goto yyinrecovery;
344#if defined(__GNUC__4)
345 goto yynewerror;
346#endif
347yynewerror:
348 yyerror("syntax error");
349#if defined(__GNUC__4)
350 goto yyerrlab;
351#endif
352yyerrlab:
353 ++yynerrs;
354yyinrecovery:
355 if (yyerrflag < 3)
356 {
357 yyerrflag = 3;
358 for (;;)
359 {
360 if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE256) >= 0 &&
361 yyn <= YYTABLESIZE263 && yycheck[yyn] == YYERRCODE256)
362 {
363#if YYDEBUG0
364 if (yydebug)
365 printf("%sdebug: state %d, error recovery shifting\
366 to state %d\n", YYPREFIX"yy", *yyssp, yytable[yyn]);
367#endif
368 if (yyssp >= yysslim && yygrowstack())
369 {
370 goto yyoverflow;
371 }
372 *++yyssp = yystate = yytable[yyn];
373 *++yyvsp = yylval;
374 goto yyloop;
375 }
376 else
377 {
378#if YYDEBUG0
379 if (yydebug)
380 printf("%sdebug: error recovery discarding state %d\n",
381 YYPREFIX"yy", *yyssp);
382#endif
383 if (yyssp <= yyss) goto yyabort;
384 --yyssp;
385 --yyvsp;
386 }
387 }
388 }
389 else
390 {
391 if (yychar == 0) goto yyabort;
392#if YYDEBUG0
393 if (yydebug)
394 {
395 yys = 0;
396 if (yychar <= YYMAXTOKEN261) yys = yyname[yychar];
397 if (!yys) yys = "illegal-symbol";
398 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
399 YYPREFIX"yy", yystate, yychar, yys);
400 }
401#endif
402 yychar = (-1);
403 goto yyloop;
404 }
405yyreduce:
406#if YYDEBUG0
407 if (yydebug)
408 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
409 YYPREFIX"yy", yystate, yyn, yyrule[yyn]);
410#endif
411 yym = yylen[yyn];
412 if (yym)
413 yyval = yyvsp[1-yym];
414 else
415 memset(&yyval, 0, sizeof yyval);
416 switch (yyn)
417 {
418case 1:
419#line 97 "/usr/src/sbin/wsconsctl/map_parse.y"
420 {
421 int i;
422 struct wscons_keymap *mp;
423
424 for (i = 0; i < KS_NUMKEYCODES0x1000; i++) {
425 mp = mapdata + i;
426 mp->command = KS_voidSymbol0xf500;
427 mp->group1[0] = KS_voidSymbol0xf500;
428 mp->group1[1] = KS_voidSymbol0xf500;
429 mp->group2[0] = KS_voidSymbol0xf500;
430 mp->group2[1] = KS_voidSymbol0xf500;
431 }
432
433 newkbmap.maplen = 0;
434 newkbmap.map = mapdata;
435 }
436break;
437case 7:
438#line 123 "/usr/src/sbin/wsconsctl/map_parse.y"
439 {
440 int src, dst;
441
442 dst = ksym_lookup(yyvsp[-2].kval);
443 src = ksym_lookup(yyvsp[0].kval);
444 newkbmap.map[dst] = kbmap.map[src];
445 if (dst >= newkbmap.maplen)
446 newkbmap.maplen = dst + 1;
447 }
448break;
449case 8:
450#line 134 "/usr/src/sbin/wsconsctl/map_parse.y"
451 {
452 if (yyvsp[-1].ival >= KS_NUMKEYCODES0x1000)
453 errx(1, "%d: keycode too large", yyvsp[-1].ival);
454 if (yyvsp[-1].ival >= newkbmap.maplen)
455 newkbmap.maplen = yyvsp[-1].ival + 1;
456 cur_mp = mapdata + yyvsp[-1].ival;
457 }
458break;
459case 11:
460#line 144 "/usr/src/sbin/wsconsctl/map_parse.y"
461 {
462 cur_mp->command = yyvsp[0].kval;
463 }
464break;
465case 12:
466#line 149 "/usr/src/sbin/wsconsctl/map_parse.y"
467 {
468 cur_mp->group1[0] = yyvsp[0].kval;
469 cur_mp->group1[1] = ksym_upcase(cur_mp->group1[0]);
470 cur_mp->group2[0] = cur_mp->group1[0];
471 cur_mp->group2[1] = cur_mp->group1[1];
472 }
473break;
474case 13:
475#line 155 "/usr/src/sbin/wsconsctl/map_parse.y"
476 {
477 cur_mp->group1[0] = yyvsp[-1].kval;
478 cur_mp->group1[1] = yyvsp[0].kval;
479 cur_mp->group2[0] = cur_mp->group1[0];
480 cur_mp->group2[1] = cur_mp->group1[1];
481 }
482break;
483case 14:
484#line 161 "/usr/src/sbin/wsconsctl/map_parse.y"
485 {
486 cur_mp->group1[0] = yyvsp[-2].kval;
487 cur_mp->group1[1] = yyvsp[-1].kval;
488 cur_mp->group2[0] = yyvsp[0].kval;
489 cur_mp->group2[1] = ksym_upcase(cur_mp->group2[0]);
490 }
491break;
492case 15:
493#line 167 "/usr/src/sbin/wsconsctl/map_parse.y"
494 {
495 cur_mp->group1[0] = yyvsp[-3].kval;
496 cur_mp->group1[1] = yyvsp[-2].kval;
497 cur_mp->group2[0] = yyvsp[-1].kval;
498 cur_mp->group2[1] = yyvsp[0].kval;
499 }
500break;
501case 16:
502#line 175 "/usr/src/sbin/wsconsctl/map_parse.y"
503 {
504 yyval.kval = yyvsp[0].kval;
505 }
506break;
507case 17:
508#line 178 "/usr/src/sbin/wsconsctl/map_parse.y"
509 {
510 char name[2];
511 int res;
512
513 if (yyvsp[0].ival < 0 || yyvsp[0].ival > 9)
514 yyerror("keysym expected");
515 name[0] = yyvsp[0].ival + '0';
516 name[1] = '\0';
517 res = name2ksym(name);
518 if (res < 0)
519 yyerror("keysym expected");
520 yyval.kval = res;
521 }
522break;
523#line 516 "map_parse.c"
524 }
525 yyssp -= yym;
526 yystate = *yyssp;
527 yyvsp -= yym;
528 yym = yylhs[yyn];
529 if (yystate == 0 && yym == 0)
530 {
531#if YYDEBUG0
532 if (yydebug)
533 printf("%sdebug: after reduction, shifting from state 0 to\
534 state %d\n", YYPREFIX"yy", YYFINAL1);
535#endif
536 yystate = YYFINAL1;
537 *++yyssp = YYFINAL1;
538 *++yyvsp = yyval;
539 if (yychar < 0)
540 {
541 if ((yychar = yylex()) < 0) yychar = 0;
542#if YYDEBUG0
543 if (yydebug)
544 {
545 yys = 0;
546 if (yychar <= YYMAXTOKEN261) yys = yyname[yychar];
547 if (!yys) yys = "illegal-symbol";
548 printf("%sdebug: state %d, reading %d (%s)\n",
549 YYPREFIX"yy", YYFINAL1, yychar, yys);
550 }
551#endif
552 }
553 if (yychar == 0) goto yyaccept;
554 goto yyloop;
555 }
556 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
557 yyn <= YYTABLESIZE263 && yycheck[yyn] == yystate)
558 yystate = yytable[yyn];
559 else
560 yystate = yydgoto[yym];
561#if YYDEBUG0
562 if (yydebug)
563 printf("%sdebug: after reduction, shifting from state %d \
564to state %d\n", YYPREFIX"yy", *yyssp, yystate);
565#endif
566 if (yyssp >= yysslim && yygrowstack())
567 {
568 goto yyoverflow;
569 }
570 *++yyssp = yystate;
571 *++yyvsp = yyval;
572 goto yyloop;
573yyoverflow:
574 yyerror("yacc stack overflow");
575yyabort:
576 if (yyss)
577 free(yyss);
578 if (yyvs)
579 free(yyvs);
580 yyss = yyssp = NULL((void *)0);
581 yyvs = yyvsp = NULL((void *)0);
582 yystacksize = 0;
583 return (1);
584yyaccept:
585 if (yyss)
586 free(yyss);
587 if (yyvs)
588 free(yyvs);
589 yyss = yyssp = NULL((void *)0);
590 yyvs = yyvsp = NULL((void *)0);
591 yystacksize = 0;
592 return (0);
593}