dthelp: coverity fixes
authorPeter Howkins <flibble@users.sf.net>
Fri, 13 Apr 2018 19:26:23 +0000 (20:26 +0100)
committerPeter Howkins <flibble@users.sf.net>
Fri, 13 Apr 2018 19:26:23 +0000 (20:26 +0100)
13 files changed:
cde/programs/dthelp/dthelpdemo/HelpCache.c
cde/programs/dthelp/dthelpgen/helpgen.c
cde/programs/dthelp/dthelpprint/Initialize.c
cde/programs/dthelp/parser/canon1/build/out.c
cde/programs/dthelp/parser/canon1/helptag/help.if
cde/programs/dthelp/parser/canon1/util/conutil.c
cde/programs/dthelp/parser/canon1/util/fclndir.c
cde/programs/dthelp/parser/pass1/eltdef/eltdef.c
cde/programs/dthelp/parser/pass1/helptag/help.c
cde/programs/dthelp/parser/pass1/helptag/help.if
cde/programs/dthelp/parser/pass1/helptag/out.c
cde/programs/dthelp/parser/pass1/util/entout.c
cde/programs/dthelp/parser/pass2/htag2/custom.c

index 0bdef5b984e812e28243d0e578e416983e7903e8..172fee1bd1b5fd51668d3ddff62b25feaea199c9 100644 (file)
@@ -194,7 +194,7 @@ static void CloseHelpCB (
   pTemp = pCacheListHead;
   
   /* Search our Cache List for the closed help dialog */
-  while ((pTemp->helpDialog != helpDialog) && (pTemp != NULL))
+  while ((pTemp != NULL) && (pTemp->helpDialog != helpDialog))
      pTemp = pTemp->pNext;
  
 
index 1ce60bc36cb66f7536900f5b7b27ed6b4212b198..05b74af684ef5a490d7245c007322498623b4052 100644 (file)
@@ -531,13 +531,13 @@ CreateFamily (
                 */
                if (NULL != bitmap && *bitmap != '/')
                  {
-                   strcpy (bitmapName, family_name);
+                   snprintf(bitmapName, sizeof(bitmapName), "%s", family_name);
                    ptr = strrchr (bitmapName, '/');
                    if (ptr)
                      {
                        ptr++;
                        *ptr = '\0';
-                       strcat (bitmapName, bitmap);
+                       snprintf(bitmapName, sizeof(bitmapName), "%s%s", bitmapName, bitmap);
                        bitmap = bitmapName;
                      }
                    else
@@ -652,8 +652,7 @@ ScanDirectory (
     if (pDir == NULL)
        return;
 
-    strcpy (fullName, directory);
-    strcat (fullName, SlashString);
+    snprintf(fullName, sizeof(fullName), "%s%s", directory, SlashString);
     ptr = fullName + strlen (fullName);
 
     /*
@@ -1058,11 +1057,10 @@ main(
                                myName, errno);
            exit (1);
          }
-       strcat (baseName, "/");
-       strcat (baseName, App_args.dir);
+        snprintf(baseName, sizeof(baseName), "%s/%s", baseName, App_args.dir);
       }
     else
-       strcpy (baseName, App_args.dir);
+        snprintf(baseName, sizeof(baseName), "%s", App_args.dir);
 
     /*
      * make sure the directory exists
@@ -1077,9 +1075,9 @@ main(
        exit (1);
       }
 
-    (void) strcpy (tmpVolume, ptr);
+    snprintf(tmpVolume, sizeof(tmpVolume), "%s", ptr);
     if (tmpVolume[strlen (tmpVolume) - 1] != '/')
-       strcat(tmpVolume, SlashString);
+        snprintf(tmpVolume, sizeof(tmpVolume), "%s", SlashString);
 
     free (ptr);
 
@@ -1101,7 +1099,7 @@ main(
         * remember the rest of the string (including the slash)
         * and strip the trailing slash from the directory path.
         */
-       strcpy (tmpVolume2, endDir);
+       snprintf(tmpVolume2, sizeof(tmpVolume2), "%s", endDir);
        *endDir = '\0';
 
        /*
@@ -1110,7 +1108,7 @@ main(
        ptr = _DtHelpCeTracePathName(tmpVolume);
        if (ptr != NULL)
          {
-           strcpy (tmpVolume, ptr);
+           snprintf(tmpVolume, sizeof(tmpVolume), "%s", ptr);
            free (ptr);
          }
 
@@ -1187,12 +1185,12 @@ main(
     /*
      * get temporary files for the volume and topic file.
      */
-    (void) strcat (tmpVolume, App_args.file);
+    snprintf(tmpVolume, sizeof(tmpVolume), "%s%s", tmpVolume, App_args.file);
 
     (void) strcpy (tmpHeader, tmpVolume);
     (void) strcpy (tmpTopic, tmpVolume);
 
-    (void) strcat (tmpVolume, Ext_Hv);
+    snprintf(tmpVolume, sizeof(tmpVolume), "%s%s", tmpVolume, Ext_Hv);
     (void) strcat (tmpHeader, "00.ht");
     (void) strcat (tmpTopic , "01.ht");
 
index 25c5f76a088d2b5cf89359830568aa138f30fbef..381f16a583d8a4740a5f4f008cf129e05583ea37 100644 (file)
@@ -810,30 +810,23 @@ static float dphm = 300.*2540.;
    int i;
    
    /* build printer resource name and class */
-   strcpy(name_prefix, appname);            /* e.g. dthelpprint */
-   strcat(name_prefix, RN_printer);         /* e.g. dthelpprint.printer */
-   
-   strcpy(class_prefix, appclass);          /* e.g. Dthelpprint */
-   strcat(class_prefix, RC_printer);        /* e.g. Dthelpprint.Printer */
+   snprintf(name_prefix, sizeof(name_prefix), "%s%s", appname, RN_printer);    /* e.g. dthelpprint.printer */
+   snprintf(class_prefix, sizeof(class_prefix), "%s%s", appclass, RC_printer); /* e.g. Dthelpprint.Printer */
    
    /********************/
    /* Get printer name */
    /********************/
    
-   strcpy(resource_name, name_prefix);   /* e.g. dthelpprint.printer */
-   strcat(resource_name, RN_rsrcname);   /* e.g. dthelpprint.printer.name */
-   strcpy(resource_class, class_prefix); /* e.g. Dthelpprint.Printer */
-   strcat(resource_class, RC_rsrcname);  /* e.g. Dthelpprint.Printer.Name */
+   snprintf(resource_name, sizeof(resource_name), "%s%s", name_prefix, RN_rsrcname);    /* e.g. dthelpprint.printer.name */
+   snprintf(resource_class, sizeof(resource_class), "%s%s", class_prefix, RC_rsrcname); /* e.g. Dthelpprint.Printer.Name */
    if (XrmGetResource(appDB, resource_name, resource_class,
                       str_type, &value) == True)
       name = value.addr;
    else name = EMPTY_STR;
    if (name[0] != EOS)
    {
-      strcat(name_prefix, DOT_STR);
-      strcat(name_prefix, name);         /* e.g. dthelpprint.printer.<name> */
-      strcat(class_prefix, DOT_STR);
-      strcat(class_prefix, name);        /* e.g. Dthelpprint.Printer.<name> */
+      snprintf(name_prefix, sizeof(name_prefix), "%s%s%s", name_prefix, DOT_STR, name);    /* e.g. dthelpprint.printer.<name> */
+      snprintf(class_prefix, sizeof(class_prefix), "%s%s%s", class_prefix, DOT_STR, name); /* e.g. Dthelpprint.Printer.<name> */
    }
    
    /**************************/
@@ -1459,10 +1452,8 @@ void _DtHPrGetResources(
          cnt > 0; 
          cnt--, rsrc++ )
    {
-      strcpy(resource_name, name_prefix);
-      strcat(resource_name, rsrc->resource_name);
-      strcpy(resource_class, class_prefix);
-      strcat(resource_class, rsrc->resource_class);
+      snprintf(resource_name, sizeof(resource_name), "%s%s", name_prefix, rsrc->resource_name);
+      snprintf(resource_class, sizeof(resource_class), "%s%s", class_prefix, rsrc->resource_class);
       if (XrmGetResource(db, resource_name,
                       resource_class, str_type, &value) == True)
          *XtRefOffset(options,rsrc->resource_offset) = value.addr;
index 3bf733138702326dc232651962581b6504d43b21..c8a3a8e9f7521502e5df35607fd1dd8b44f64027 100644 (file)
@@ -544,6 +544,8 @@ void srefout(M_NOPAR)
       fputs(ndif, dtd) ;
       }
     SUBONE
+    
+    free(mapbysref);
     }
 
 /* Output one element block in a template */
index 420dca3d1a68d49360d0a1d89a075c9ea82d8189..d8ec9ce0e8e29be94e132a7d74acf5996ab1fcea 100644 (file)
@@ -681,11 +681,11 @@ static char ident6[]="@(#) (c) Copyright 1993, 1994 Unix System Labs, Inc., a su
     thisnodelevel = 2;
     sprintf(id, "%s%s", sdlReservedName, glossary_string);
     mb_starthelpnode("_GLOSSARY", id, thisnodelevel);
-    strcpy(chapstring, string) ;
-    if (strlen(chapstring) + 1 > sizeof(chapstring)) {
+    if (strlen(string) + 1 > sizeof(chapstring)) {
       m_error("Program error: exceeded chapstring") ;
       m_exit(TRUE) ;
       }
+    sprintf(chapstring, sizeof(chapstring), "%s", string) ;
     fputs("\nGlossary\n", stderr) ;
     glossary = TRUE ;
     fprintf(outfile, "<HEAD SSI=\"CHAPHEAD\">%s</HEAD>\n", string);
index 71ae5ad1e3c35dc6d0c84cb23a37f82cd5be6896..45b3b14f297ec0acfdc483bf5b8711761b054dd9 100644 (file)
@@ -424,8 +424,13 @@ if (loading) newdlm = (char **) calloc(trysize, sizeof(M_WCHAR *));
 if (! newtransit || (loading && ! newdlm))
     {
     trysize = NUMDELIM + 1;
+    free(newtransit);
     newtransit = (int *) calloc(NUMCON * trysize, sizeof(int));
-    if (loading) newdlm = (char **) calloc(trysize, sizeof(M_WCHAR *));
+    if (loading)
+        {
+        free(newdlm);
+        newdlm = (char **) calloc(trysize, sizeof(M_WCHAR *));
+        }
     }
 if (! newtransit || (loading && ! newdlm))
     {
index 8bc8f59e6d14cf63d7e19392a74ed788917a30d5..c0ed123d03c90ed2c40882839b49c392a6ac1db1 100644 (file)
@@ -144,6 +144,7 @@ void copyfile(pfile1,pfile2)
        ret = system(pcmd);
        ret = snprintf(pcmd, slen, "touch %s",pfile2);
        ret = system(pcmd);
+       free(pcmd);
 }
 
 int nextchar(file, data)
index af49e3ba82d2bbe8423c6d75f923102757a531f6..fef2f2e92a033fa98115513a9deaf440315ee731 100644 (file)
@@ -75,7 +75,7 @@ int main(argc, argv)
       fprintf(stderr, "**** Specify interface file ****\n") ;
       exit(TRUE) ;
       }
-    strncpy(iffile, argv[1], IFLEN) ;
+    snprintf(iffile, IFLEN, "%s", argv[1]) ;
     initialize() ;
     while (TRUE) {
       m_token = scan() ;
index 474a6a0d4492dbc5036a501ad20afff857047536..9c6c235c63808841eba8e1d9449ca9f2c97b0c19 100644 (file)
@@ -125,7 +125,7 @@ if ( *(m_argv[0]) == '/' )
 else
     {
     /* not fully specified, check each component of path for ourself */
-    strcpy(patbuf, getenv("PATH"));
+    snprintf(patbuf, sizeof(patbuf), "%s", getenv("PATH"));
     path = patbuf;
     cp = path;
 
@@ -822,9 +822,7 @@ if (listtype == ORDER)
     switch (lastlist->lastlist->order)
        {
        case UROMAN:
-           strcpy(orderString, ROMAN100[count / 100]);
-           strcat(orderString, ROMAN10[(count / 10) % 10]);
-           strcat(orderString, ROMAN0[count % 10]);
+           snprintf(orderString, sizeof(orderString), "%s%s%s", ROMAN100[count / 100], ROMAN10[(count / 10) % 10], ROMAN0[count % 10]);
            type = romanString;
            break;
        case UALPHA:
@@ -846,9 +844,7 @@ if (listtype == ORDER)
            type = arabicString;
            break;
        case LROMAN:
-           strcpy(orderString, roman100[count / 100]);
-           strcat(orderString, roman10[(count / 10) % 10]);
-           strcat(orderString, roman0[count % 10]);
+           snprintf(orderString, sizeof(orderString), "%s%s%s", roman100[count / 100], roman10[(count / 10) % 10], roman0[count % 10]);
            type = romanString;
            break;
        case LALPHA:
@@ -1512,11 +1508,10 @@ int         execVer;
 int         compVer;
 int         isStd;
 
-strcpy(myLocale, pLang);
+snprintf(myLocale, sizeof(myLocale), "%s", pLang);
 if (*pCharset)
     {
-    strcat(myLocale, ".");
-    strcat(myLocale, pCharset);
+    snprintf(myLocale, sizeof(myLocale), "%s.%s", myLocale, pCharset);
     }
 
 if ((_DtLcxOpenAllDbs(&myDb) != 0) ||
@@ -1604,14 +1599,14 @@ else
     else
        strcpy(pLang, cString);
 
-    if (*charset)
+    if ( *charset)
        {
        strcpy(pCharset, charset);
-       mb_free(&charset);
        }
     else
        strcpy(pCharset, isoString);
     }
+       mb_free(&charset);
 
 _DtLcxCloseDb(&myDb);
 free(charset);
@@ -1772,9 +1767,9 @@ if (!charset)
 if (dotPtr)
     *dotPtr = '\0';
 
-strcpy(stdLang, locale);
+snprintf(stdLang, sizeof(stdLang), "%s", locale);
 if (charset)
-    strcpy(stdCharset, charset);
+    snprintf(stdCharset, sizeof(stdCharset), "%s", charset);
 SetStdLocale(stdLang, stdCharset);
 
 if (*stdCharset)
@@ -2751,7 +2746,7 @@ if (! notehead)
     }
 
 icon = GetDefaultHeaderString(iconFile, M_SYSTEM, "");
-if (*icon)
+if (icon && *icon)
     {
     char id[32];
 
@@ -2762,8 +2757,8 @@ if (*icon)
     fputs("CLASS=\"ICON\" SSI=\"NCW-ICON\">", outfile);
     fputs("</REFITEM>\n</SNREF></HEAD>\n", outfile);
     AddToSNB(id, icon);
-    m_free(icon, "icon name");
     }
+m_free(icon, "icon name");
 }
 
 
@@ -2876,6 +2871,7 @@ else
     }
 
 if (try != pathbuf) mb_free(&try);
+mb_free(&mb_inputname);
 }
 
 /* Below is a modified version of m_cyclent() that returns a pointer
index 1a98f3ee42ca397e40c09b39fecfc14afb7abe0e..a18fe110bad28e719ca1305e1387364e3abb8abc 100644 (file)
@@ -775,11 +775,11 @@ static char ident6[]="@(#) (c) Copyright 1993, 1994 Unix System Labs, Inc., a su
     thisnodelevel = 2;
     sprintf(id, "%s%s", sdlReservedName, glossary_string);
     mb_starthelpnode("_GLOSSARY", id, thisnodelevel);
-    strcpy(chapstring, string) ;
-    if (strlen(chapstring) + 1 > sizeof(chapstring)) {
+    if (strlen(string) + 1 > sizeof(chapstring)) {
       m_error("Program error: exceeded chapstring") ;
       m_exit(TRUE) ;
       }
+    snprintf(chapstring, sizeof(chapstring), "%s", string) ;
     fputs("\nGlossary\n", stderr) ;
     glossary = TRUE ;
     fprintf(outfile, "<HEAD SSI=\"CHAPHEAD\">%s</HEAD>\n", string);
index f4e39146b9e0a9c757ae472a91bedec12c858d3d..13154fba69bc55848bb56a8a03031f73a722bc63 100644 (file)
@@ -198,7 +198,7 @@ if (bufflen == 1)
        exLineNum++;
     if (special[index])
        {
-       strcpy(exbuff, special[index]);
+       snprintf(exbuff, sizeof(exbuff), "%s", special[index]);
        bufflen = strlen(exbuff);
        }
     }
@@ -230,7 +230,7 @@ if (bufflen == 1)
     index = (unsigned char) imbuff[0];
     if (special[index])
        {
-       strcpy(imbuff, special[index]);
+       snprintf(imbuff, sizeof(imbuff), "%s", special[index]);
        bufflen = strlen(imbuff);
        }
     mb_strcode(imbuff, outfile);
index 82461864a3919f5eaddcbbb7f34b15890aa7bd35..820afb52aa2eda945319d2045d26b9ed9394f1c4 100644 (file)
@@ -72,8 +72,7 @@ void entout(fname)
     int nameindex ;
     LOGICAL start ;
 
-    strncpy(efilename, fname, ENTFILENAME) ;
-    strncpy(&efilename[strlen(efilename)], ".h", 2) ;
+    snprintf(efilename, sizeof(efilename), "%s.h", fname) ;
     m_openchk(&entfile, efilename, "w") ;
 
     fprintf(entfile, "#include \"entdef.h\"\n") ;
index 2a64bb61ce2253096c228b6004581d2ba5d77c97..27e62b47e1140b0fe20d099fe165a4f14b8bb00f 100644 (file)
@@ -231,7 +231,10 @@ SEARCH *searchp;
 char *mb_entcontent;
 
 mb_entcontent = MakeMByteString(entcontent);
-if (!mb_entcontent || !*mb_entcontent) return NULL; /* null file name, don't open a directory */
+if (!mb_entcontent || !*mb_entcontent) {
+    m_free(mb_entcontent, "multi-byte string");
+    return NULL; /* null file name, don't open a directory */
+}
 
 open = fopen(mb_entcontent, "r");
 if (open)