Ignore:
Timestamp:
Dec 25, 2018, 9:59:03 PM (7 years ago)
Author:
bird
Message:

kmk_install: Fixed create_tempfile (glibc wants exactly 6 X'es) and did proper overflow handling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/kmkbuiltin/install.c

    r3227 r3241  
    859859create_tempfile(const char *path, char *temp, size_t tsize)
    860860{
    861         char *p;
    862 
    863         (void)strncpy(temp, path, tsize);
    864         temp[tsize - 1] = '\0';
    865         if ((p = last_slash(temp)) != NULL)
    866                 p++;
     861        static char s_szTemplate[] = "INS@XXXXXX";
     862        const char *p = last_slash(path);
     863        if (p) {
     864                size_t cchDir = ++p - path;
     865                if (cchDir + sizeof(s_szTemplate) <= tsize) {
     866                        memcpy(temp, path, cchDir);
     867                        memcpy(&temp[cchDir], s_szTemplate, sizeof(s_szTemplate));
     868                } else
     869                        return EOVERFLOW;
     870        } else if (tsize >= sizeof(s_szTemplate))
     871                memcpy(temp, s_szTemplate, sizeof(s_szTemplate));
    867872        else
    868                 p = temp;
    869         (void)strncpy(p, "INS@XXXX", &temp[tsize - 1] - p);
    870         temp[tsize - 1] = '\0';
     873                return EOVERFLOW;
     874
    871875        return (mkstemp(temp));
    872876}
Note: See TracChangeset for help on using the changeset viewer.