about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/HTML.c14
-rw-r--r--src/LYGetFile.c13
-rw-r--r--src/LYMain.c4
-rw-r--r--src/parsdate.c84
-rw-r--r--src/parsdate.y21
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;