diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/HTML.c | 14 | ||||
-rw-r--r-- | src/LYGetFile.c | 13 | ||||
-rw-r--r-- | src/LYMain.c | 4 | ||||
-rw-r--r-- | src/parsdate.c | 84 | ||||
-rw-r--r-- | src/parsdate.y | 21 |
5 files changed, 88 insertions, 48 deletions
diff --git a/src/HTML.c b/src/HTML.c index b7553e61..c7183f79 100644 --- a/src/HTML.c +++ b/src/HTML.c @@ -1,5 +1,5 @@ /* - * $LynxId: HTML.c,v 1.190 2018/04/01 15:37:53 tom Exp $ + * $LynxId: HTML.c,v 1.192 2018/04/01 23:26:24 tom Exp $ * * Structured stream to Rich hypertext converter * ============================================ @@ -4625,7 +4625,7 @@ static int HTML_start_element(HTStructured * me, int element_number, me->UsePlainSpace = TRUE; } - StrAllocCopy(I.value, + StrAllocCopy(I_value, ((UseALTasVALUE == TRUE) ? value[HTML_INPUT_ALT] : value[HTML_INPUT_VALUE])); @@ -4633,13 +4633,14 @@ static int HTML_start_element(HTStructured * me, int element_number, I.value_cs = current_char_set; } CTRACE((tfp, "4.Ok, we're trying type=[%s]\n", NONNULL(I.type))); - TRANSLATE_AND_UNESCAPE_ENTITIES6(&I.value, + TRANSLATE_AND_UNESCAPE_ENTITIES6(&I_value, ATTR_CS_IN, I.value_cs, (BOOL) (me->UsePlainSpace && !me->HiddenValue), me->UsePlainSpace, me->HiddenValue); + I.value = I_value; if (me->UsePlainSpace == TRUE) { /* * Convert any newlines or tabs to spaces, and trim any @@ -4664,7 +4665,8 @@ static int HTML_start_element(HTStructured * me, int element_number, * If we didn't put up a link, then HText_beginInput() will use * "[IMAGE]-Submit". - FM */ - StrAllocCopy(I.value, "Submit"); + StrAllocCopy(I_value, "Submit"); + I.value = I_value; } else if (ImageSrc) { /* [IMAGE]-Submit with verbose images and not clickable images. * Use ImageSrc if no other alt or value is supplied. --LE @@ -4814,7 +4816,7 @@ static int HTML_start_element(HTStructured * me, int element_number, * We have a submit or reset button in a PRE block, so * output the entire value from the markup. If it extends * to the right margin, it will wrap there, and only the - * portion before that wrap will be hightlighted on screen + * portion before that wrap will be highlighted on screen * display (Yuk!) but we may as well show the rest of the * full value on the next or more lines. - FM */ @@ -4854,6 +4856,8 @@ static int HTML_start_element(HTStructured * me, int element_number, HText_endInput(me->text); } FREE(ImageSrc); + if (strcasecomp(NonNull(I.type), "submit")) + FREE(I_value); FREE(I_name); } break; diff --git a/src/LYGetFile.c b/src/LYGetFile.c index 18e1f788..22b43cee 100644 --- a/src/LYGetFile.c +++ b/src/LYGetFile.c @@ -1,4 +1,4 @@ -/* $LynxId: LYGetFile.c,v 1.95 2018/03/18 19:34:45 tom Exp $ */ +/* $LynxId: LYGetFile.c,v 1.96 2018/04/01 15:27:18 tom Exp $ */ #include <HTUtils.h> #include <HTTP.h> #include <HTAnchor.h> /* Anchor class */ @@ -1296,11 +1296,11 @@ static struct trust *get_trust(struct trust **table, const char *src, int type) } #ifdef LY_FIND_LEAKS -static void free_data(struct trust *cur) +static void free_data(struct trust **data) { + struct trust *cur = (*data); struct trust *next; - cur = trusted_exec; while (cur) { FREE(cur->src); FREE(cur->path); @@ -1308,13 +1308,14 @@ static void free_data(struct trust *cur) FREE(cur); cur = next; } + *data = NULL; } static void LYTrusted_free(void) { - free_data(trusted_exec); - free_data(always_trusted_exec); - free_data(trusted_cgi); + free_data(&trusted_exec); + free_data(&always_trusted_exec); + free_data(&trusted_cgi); return; } diff --git a/src/LYMain.c b/src/LYMain.c index db9112b9..cba6794a 100644 --- a/src/LYMain.c +++ b/src/LYMain.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYMain.c,v 1.279 2018/03/30 09:22:45 tom Exp $ + * $LynxId: LYMain.c,v 1.280 2018/04/01 20:48:44 tom Exp $ */ #include <HTUtils.h> #include <HTTP.h> @@ -772,6 +772,8 @@ static void free_lynx_globals(void) #ifdef VMS Define_VMSLogical("LYNX_VERSION", ""); +#else + (void) putenv("LYNX_VERSION=" LYNX_VERSION); #endif /* VMS */ #ifndef VMS FREE(lynx_version_putenv_command); diff --git a/src/parsdate.c b/src/parsdate.c index 15d9cce9..9ac5d772 100644 --- a/src/parsdate.c +++ b/src/parsdate.c @@ -5,7 +5,7 @@ #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 -#define YYPATCH 20140715 +#define YYPATCH 20170709 #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) @@ -22,7 +22,7 @@ #include <LYLeaks.h> /* - * $LynxId: parsdate.c,v 1.17 2018/02/19 15:14:58 tom Exp $ + * $LynxId: parsdate.c,v 1.18 2018/04/01 22:22:06 tom Exp $ * * This module is adapted and extended from tin, to use for LYmktime(). * @@ -150,13 +150,13 @@ static void date_error(const char GCC_UNUSED *s) /*NOTREACHED */ } -#line 136 "./parsdate.y" #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 +#line 136 "./parsdate.y" typedef union { time_t Number; enum _MERIDIAN Meridian; @@ -937,6 +937,16 @@ static int GetTimeInfo(TIMEINFO * Now) return 0; } +#if defined(YYBYACC) && defined(YYPURE) && defined(LY_FIND_LEAKS) +#undef YYPURE +#define YYPURE 1 +static void yyfreestack(YYSTACKDATA *); +static void parsedate_leaks(void) +{ + yyfreestack(&yystack); +} +#endif + time_t parsedate(char *p, TIMEINFO * now) { @@ -944,6 +954,15 @@ time_t parsedate(char *p, TIMEINFO ti; time_t Start; +#if defined(YYBYACC) && defined(YYPURE) && defined(LY_FIND_LEAKS) + static int initialized; + + if (!initialized) { + initialized = 1; + atexit(parsedate_leaks); + } +#endif + yyInput = p; if (now == NULL) { now = &ti; @@ -990,10 +1009,10 @@ time_t parsedate(char *p, * from the error return value. (Alternately could set errno on error.) */ return (Start == (time_t) -1) ? 0 : Start; } -#line 994 "y.tab.c" +#line 1013 "y.tab.c" #if YYDEBUG -#include <stdio.h> /* needed for printf */ +#include <stdio.h> /* needed for printf */ #endif #include <stdlib.h> /* needed for malloc, etc */ @@ -1065,6 +1084,8 @@ YYPARSE_DECL() } #endif + yym = 0; + yyn = 0; yynerrs = 0; yyerrflag = 0; yychar = YYEMPTY; @@ -1084,28 +1105,26 @@ yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { - if ((yychar = YYLEX) < 0) yychar = YYEOF; + yychar = YYLEX; + if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { - yys = yyname[YYTRANSLATE(yychar)]; + if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } - if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif - if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) - { - goto yyoverflow; - } + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yytable[yyn]; *++yystack.s_mark = yytable[yyn]; *++yystack.l_mark = yylval; @@ -1113,18 +1132,17 @@ yyloop: if (yyerrflag > 0) --yyerrflag; goto yyloop; } - if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } - if (yyerrflag) goto yyinrecovery; + if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); - goto yyerrlab; - + goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; @@ -1134,18 +1152,15 @@ yyinrecovery: yyerrflag = 3; for (;;) { - if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); #endif - if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) - { - goto yyoverflow; - } + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yytable[yyn]; *++yystack.s_mark = yytable[yyn]; *++yystack.l_mark = yylval; @@ -1170,7 +1185,7 @@ yyinrecovery: #if YYDEBUG if (yydebug) { - yys = yyname[YYTRANSLATE(yychar)]; + if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } @@ -1186,10 +1201,11 @@ yyreduce: YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; - if (yym) + if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); + switch (yyn) { case 3: @@ -1478,7 +1494,7 @@ case 35: yyval.Meridian = yystack.l_mark[0].Meridian; } break; -#line 1482 "y.tab.c" +#line 1498 "y.tab.c" } yystack.s_mark -= yym; yystate = *yystack.s_mark; @@ -1496,11 +1512,12 @@ break; *++yystack.l_mark = yyval; if (yychar < 0) { - if ((yychar = YYLEX) < 0) yychar = YYEOF; + yychar = YYLEX; + if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { - yys = yyname[YYTRANSLATE(yychar)]; + if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } @@ -1509,8 +1526,8 @@ break; if (yychar == YYEOF) goto yyaccept; goto yyloop; } - if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; @@ -1519,10 +1536,7 @@ break; printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yystack.s_mark, yystate); #endif - if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) - { - goto yyoverflow; - } + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yyval; goto yyloop; diff --git a/src/parsdate.y b/src/parsdate.y index f60a649d..d90fe516 100644 --- a/src/parsdate.y +++ b/src/parsdate.y @@ -3,7 +3,7 @@ #include <LYLeaks.h> /* - * $LynxId: parsdate.y,v 1.20 2013/01/05 01:58:50 tom Exp $ + * $LynxId: parsdate.y,v 1.21 2018/04/01 22:21:45 tom Exp $ * * This module is adapted and extended from tin, to use for LYmktime(). * @@ -883,6 +883,16 @@ static int GetTimeInfo(TIMEINFO * Now) return 0; } +#if defined(YYBYACC) && defined(YYPURE) && defined(LY_FIND_LEAKS) +#undef YYPURE +#define YYPURE 1 +static void yyfreestack(YYSTACKDATA *); +static void parsedate_leaks(void) +{ + yyfreestack(&yystack); +} +#endif + time_t parsedate(char *p, TIMEINFO * now) { @@ -890,6 +900,15 @@ time_t parsedate(char *p, TIMEINFO ti; time_t Start; +#if defined(YYBYACC) && defined(YYPURE) && defined(LY_FIND_LEAKS) + static int initialized; + + if (!initialized) { + initialized = 1; + atexit(parsedate_leaks); + } +#endif + yyInput = p; if (now == NULL) { now = &ti; |