]> git.ipfire.org Git - thirdparty/make.git/commitdiff
* src/warnings.c (decode_warn_actions): [SV 63990] Handle errors
authorPaul Smith <psmith@gnu.org>
Mon, 3 Apr 2023 11:58:46 +0000 (07:58 -0400)
committerPaul Smith <psmith@gnu.org>
Mon, 3 Apr 2023 12:05:54 +0000 (08:05 -0400)
src/warning.c

index c295fdc7e0d1dfcb79f3a9aa715d8d741eef1f83..8cf9fff8a3fc89d18b7b97112405f78ff79a18a5 100644 (file)
@@ -136,35 +136,39 @@ decode_warn_actions (const char *value, const floc *flocp)
         {
           enum warning_type type;
           const char *cp = memchr (value, ':', ep - value);
+          int wl, al;
+
           if (!cp)
             cp = ep;
-          type = decode_warn_name (value, cp - value);
+          wl = (int)(cp - value);
+          type = decode_warn_name (value, wl);
+          if (cp == ep)
+            action = w_warn;
+          else
+            {
+              /* There's a warning action: decode it.  */
+              ++cp;
+              al = (int)(ep - cp);
+              action = decode_warn_action (cp, al);
+            }
+
           if (type == wt_max)
             {
-              int l = (int)(cp - value);
               if (!flocp)
-                ONS (fatal, NILF, _("unknown warning '%.*s'"), l, value);
+                ONS (fatal, NILF, _("unknown warning '%.*s'"), wl, value);
               ONS (error, flocp,
-                   _("unknown warning '%.*s': ignored"), l, value);
+                   _("unknown warning '%.*s': ignored"), wl, value);
             }
-
-          /* If there's a warning action, decode it.  */
-          if (cp == ep)
-            action = w_warn;
-          else
+          else if (action == w_unset)
             {
-              ++cp;
-              action = decode_warn_action (cp, ep - cp);
-              if (action == w_unset)
-                {
-                  int l = (int)(ep - cp);
-                  if (!flocp)
-                    ONS (fatal, NILF, _("unknown warning action '%.*s'"), l, cp);
-                  ONS (error, flocp,
-                       _("unknown warning action '%.*s': ignored"), l, cp);
-                }
+              if (!flocp)
+                ONS (fatal, NILF,
+                     _("unknown warning action '%.*s'"), al, cp);
+              ONS (error, flocp,
+                   _("unknown warning action '%.*s': ignored"), al, cp);
             }
-          data->actions[type] = action;
+          else
+            data->actions[type] = action;
         }
 
       value = ep;