VirtualBox

Changeset 92669 in vbox


Ignore:
Timestamp:
Dec 1, 2021 9:14:24 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
148565
Message:

IPRT/RTEnvDupEx: Use RTStrAlloc instead of RTMemAlloc for big values. Added missing alloc failure check.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/generic/RTEnvDupEx-generic.cpp

    r82968 r92669  
    5353
    5454    /*
    55      * It's a bug bugger.
     55     * It's a big bugger.
    5656     */
    57     size_t  cbBuf  = _1K;
    58     char   *pszBuf = (char *)RTMemAlloc(cbBuf);
    59     for (;;)
     57    size_t cbBuf = _1K;
     58    do
    6059    {
     60        char *pszBuf = RTStrAlloc(cbBuf);
     61        AssertBreak(pszBuf);
     62
    6163        rc = RTEnvGetEx(Env, pszVar, pszBuf, cbBuf, NULL);
    6264        if (RT_SUCCESS(rc))
    63             return pszBuf; /* ASSUMES RTMemAlloc can be freed by RTStrFree! */
     65            return pszBuf;
    6466
     67        RTStrFree(pszBuf);
     68
     69        /* If overflow double the buffer. */
    6570        if (rc != VERR_BUFFER_OVERFLOW)
    6671            break;
     72        cbBuf *= 2;
     73    } while (cbBuf < _64M);
    6774
    68         if (cbBuf >= 64 * _1M)
    69             break;
    70         cbBuf *= 2;
    71 
    72         char *pszNew = (char *)RTMemRealloc(pszBuf, cbBuf);
    73         if (!pszNew)
    74             break;
    75         pszBuf = pszNew;
    76     }
    77 
    78     RTMemFree(pszBuf);
    7975    return NULL;
    8076}
    81 RT_EXPORT_SYMBOL(RTEnvGetExecEnvP);
     77RT_EXPORT_SYMBOL(RTEnvDupEx);
    8278
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette