VirtualBox

Changeset 90810 in vbox for trunk/src


Ignore:
Timestamp:
Aug 23, 2021 7:52:46 PM (3 years ago)
Author:
vboxsync
Message:

Storage/VDGetFilename: Don't validate output buffer content input (copy & paste). More VALID_PTR -> AssertPtr

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Storage/VD.cpp

    r90809 r90810  
    91059105                                char *pszFilename, unsigned cbFilename)
    91069106{
    9107     int rc;
    9108     int rc2;
    9109     bool fLockRead = false;
    9110 
    91119107    LogFlowFunc(("pDisk=%#p nImage=%u pszFilename=%#p cbFilename=%u\n",
    91129108                 pDisk, nImage, pszFilename, cbFilename));
    9113     do
    9114     {
    9115         /* sanity check */
    9116         AssertPtrBreakStmt(pDisk, rc = VERR_INVALID_PARAMETER);
    9117         AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature));
    9118 
    9119         /* Check arguments. */
    9120         AssertMsgBreakStmt(VALID_PTR(pszFilename) && *pszFilename,
    9121                            ("pszFilename=%#p \"%s\"\n", pszFilename, pszFilename),
    9122                            rc = VERR_INVALID_PARAMETER);
    9123         AssertMsgBreakStmt(cbFilename,
    9124                            ("cbFilename=%u\n", cbFilename),
    9125                            rc = VERR_INVALID_PARAMETER);
    9126 
    9127         rc2 = vdThreadStartRead(pDisk);
    9128         AssertRC(rc2);
    9129         fLockRead = true;
    9130 
    9131         PVDIMAGE pImage = vdGetImageByNumber(pDisk, nImage);
    9132         AssertPtrBreakStmt(pImage, rc = VERR_VD_IMAGE_NOT_FOUND);
    9133 
    9134         size_t cb = strlen(pImage->pszFilename);
    9135         if (cb <= cbFilename)
    9136         {
    9137             strcpy(pszFilename, pImage->pszFilename);
    9138             rc = VINF_SUCCESS;
    9139         }
    9140         else
    9141         {
    9142             strncpy(pszFilename, pImage->pszFilename, cbFilename - 1);
    9143             pszFilename[cbFilename - 1] = '\0';
    9144             rc = VERR_BUFFER_OVERFLOW;
    9145         }
    9146     } while (0);
    9147 
    9148     if (RT_UNLIKELY(fLockRead))
    9149     {
    9150         rc2 = vdThreadFinishRead(pDisk);
    9151         AssertRC(rc2);
    9152     }
     9109    /* sanity check */
     9110    AssertPtrReturn(pDisk, VERR_INVALID_POINTER);
     9111    AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature));
     9112
     9113    /* Check arguments. */
     9114    AssertPtrReturn(pszFilename, VERR_INVALID_POINTER);
     9115    AssertReturn(cbFilename > 0, VERR_INVALID_PARAMETER);
     9116
     9117    /* Do the job. */
     9118    int rc2 = vdThreadStartRead(pDisk);
     9119    AssertRC(rc2);
     9120
     9121    PVDIMAGE pImage = vdGetImageByNumber(pDisk, nImage);
     9122    int rc;
     9123    if (pImage)
     9124        rc = RTStrCopy(pszFilename, cbFilename, pImage->pszFilename);
     9125    else
     9126        rc = VERR_VD_IMAGE_NOT_FOUND;
     9127
     9128    rc2 = vdThreadFinishRead(pDisk);
     9129    AssertRC(rc2);
    91539130
    91549131    LogFlowFunc(("returns %Rrc, pszFilename=\"%s\"\n", rc, pszFilename));
Note: See TracChangeset for help on using the changeset viewer.

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