VirtualBox

Changeset 97609 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Nov 18, 2022 3:59:28 PM (2 years ago)
Author:
vboxsync
Message:

Guest Control/Main: Catch OOM situations in GuestFile::read() + GuestFile::readAt().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/GuestFileImpl.cpp

    r96407 r97609  
    16391639        aToRead = _1M;
    16401640
    1641     aData.resize(aToRead);
    1642 
    16431641    HRESULT hrc = S_OK;
    16441642
    1645     uint32_t cbRead;
    1646     int vrc = i_readData(aToRead, aTimeoutMS,
     1643    int vrc;
     1644    try
     1645    {
     1646        aData.resize(aToRead);
     1647
     1648        uint32_t cbRead;
     1649        vrc = i_readData(aToRead, aTimeoutMS,
    16471650                         &aData.front(), aToRead, &cbRead);
    16481651
    1649     if (RT_SUCCESS(vrc))
    1650     {
    1651         if (aData.size() != cbRead)
    1652             aData.resize(cbRead);
    1653     }
    1654     else
    1655     {
    1656         aData.resize(0);
    1657 
     1652        if (RT_SUCCESS(vrc))
     1653        {
     1654            if (aData.size() != cbRead)
     1655                aData.resize(cbRead);
     1656        }
     1657        else
     1658        {
     1659            aData.resize(0);
     1660        }
     1661    }
     1662    catch (std::bad_alloc &)
     1663    {
     1664        vrc = VERR_NO_MEMORY;
     1665    }
     1666
     1667    if (RT_FAILURE(vrc))
    16581668        hrc = setErrorBoth(VBOX_E_IPRT_ERROR, vrc, tr("Reading from file \"%s\" failed: %Rrc"),
    16591669                           mData.mOpenInfo.mFilename.c_str(), vrc);
    1660     }
    16611670
    16621671    LogFlowFuncLeaveRC(vrc);
     
    16781687        aToRead = _1M;
    16791688
    1680     aData.resize(aToRead);
    1681 
    16821689    HRESULT hrc = S_OK;
    16831690
    1684     size_t cbRead;
    1685     int vrc = i_readDataAt(aOffset, aToRead, aTimeoutMS,
     1691    int vrc;
     1692    try
     1693    {
     1694        aData.resize(aToRead);
     1695
     1696        size_t cbRead;
     1697        vrc = i_readDataAt(aOffset, aToRead, aTimeoutMS,
    16861698                           &aData.front(), aToRead, &cbRead);
    1687     if (RT_SUCCESS(vrc))
    1688     {
    1689         if (aData.size() != cbRead)
    1690             aData.resize(cbRead);
    1691     }
    1692     else
    1693     {
    1694         aData.resize(0);
    1695 
     1699        if (RT_SUCCESS(vrc))
     1700        {
     1701            if (aData.size() != cbRead)
     1702                aData.resize(cbRead);
     1703        }
     1704        else
     1705        {
     1706            aData.resize(0);
     1707        }
     1708    }
     1709    catch (std::bad_alloc &)
     1710    {
     1711        vrc = VERR_NO_MEMORY;
     1712    }
     1713
     1714    if (RT_FAILURE(vrc))
    16961715        hrc = setErrorBoth(VBOX_E_IPRT_ERROR, vrc, tr("Reading from file \"%s\" (at offset %RU64) failed: %Rrc"),
    16971716                           mData.mOpenInfo.mFilename.c_str(), aOffset, vrc);
    1698     }
    16991717
    17001718    LogFlowFuncLeaveRC(vrc);
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