Description: Do not increment the loop variable
 When parsing FN_DOMAIN intervals, newfunction reuses 
 the loop variable i, causing the segmentation fault
 due to arrays out of bounds access.
 This patch introduces a separate variable for the
 interval parsing.
Author: Vladimir Petko <vladimir.petko@canonical.com>
Bug-Ubuntu: https://bugs.launchpad.net/bugs/2144689
Forwarded: no
Last-Update: 2026-03-18

--- a/units.c
+++ b/units.c
@@ -1377,7 +1377,7 @@
   char *params[MAX_FUNC_PARAMS];
   char *forward_dim[MAX_FUNC_PARAMS];
   int param_count, extrachars;
-  int looking_for_keywords,i;
+  int looking_for_keywords,i,param_index;
   struct interval domain[MAX_FUNC_PARAMS];
   struct interval range; 
   int noerror = 0;
@@ -1526,17 +1526,17 @@
         if (i==FN_DOMAIN){
           char *x=unitdef;
           unitdef = parseinterval(unitdef, domain, unitname, linenum, file, errfile, &errors, "domain=");
-          i=1;
+          param_index=1;
           while(*unitdef && strchr(",[(",*unitdef)){
 	    if (*unitdef==',') unitdef++;
-            if (i>=param_count){
+            if (param_index>=param_count){
               if (errfile) fprintf(errfile,
                      "%s: definition of function '%s' has too many intervals in domain in '%s' line %d\n",
                      progname,unitname,file,linenum);
               BADFILE;
             }
-            unitdef = parseinterval(unitdef, domain+i, unitname, linenum, file, errfile, &errors, "domain=");
-            i++;
+            unitdef = parseinterval(unitdef, domain+param_index, unitname, linenum, file, errfile, &errors, "domain=");
+            param_index++;
           }
         }
         if (*unitdef!=' '){
