VirtualBox

Ignore:
Timestamp:
Oct 17, 2019 3:09:15 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
134032
Message:

Shared Clipboard/Transfers: Added limiting of object and list handles (4096 by default).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/SharedClipboard/clipboard-transfers.cpp

    r81320 r81322  
    792792    AssertMsgReturn(pTransfer->pszPathRootAbs, ("Transfer has no root path set\n"), VERR_INVALID_PARAMETER);
    793793    AssertMsgReturn(pOpenCreateParms->pszPath, ("No path in open/create params set\n"), VERR_INVALID_PARAMETER);
     794
     795    if (pTransfer->cObjHandles == pTransfer->cMaxObjHandles)
     796        return VERR_SHCLPB_MAX_OBJECTS_REACHED;
    794797
    795798    LogFlowFunc(("pszPath=%s, fCreate=0x%x\n", pOpenCreateParms->pszPath, pOpenCreateParms->fCreate));
     
    834837
    835838                RTListAppend(&pTransfer->lstObj, &pInfo->Node);
     839                pTransfer->cObjHandles++;
     840
     841                LogFlowFunc(("cObjHandles=%RU32\n", pTransfer->cObjHandles));
    836842
    837843                *phObj = pInfo->hObj;
     
    914920
    915921            RTListNodeRemove(&pInfo->Node);
     922
     923            Assert(pTransfer->cObjHandles);
     924            pTransfer->cObjHandles--;
    916925
    917926            ShClTransferObjHandleInfoDestroy(pInfo);
     
    12601269        pTransfer->State.enmStatus = SHCLTRANSFERSTATUS_INITIALIZED; /* Now we're ready to run. */
    12611270
     1271        pTransfer->cMaxListHandles = _4K; /** @todo Make this dynamic. */
     1272        pTransfer->cMaxObjHandles  = _4K; /** @todo Ditto. */
     1273
    12621274        if (pTransfer->Callbacks.pfnTransferInitialize)
    12631275        {
     
    13831395
    13841396    int rc;
     1397
     1398    if (pTransfer->cListHandles == pTransfer->cMaxListHandles)
     1399        return VERR_SHCLPB_MAX_LISTS_REACHED;
    13851400
    13861401    if (pTransfer->State.enmSource == SHCLSOURCE_LOCAL)
     
    14391454                            {
    14401455                                RTListAppend(&pTransfer->lstList, &pInfo->Node);
    1441 
    1442                                 LogFlowFunc(("pszPathLocalAbs=%s, hList=%RU64\n", pInfo->pszPathLocalAbs, pInfo->hList));
     1456                                pTransfer->cListHandles++;
     1457
     1458                                LogFlowFunc(("pszPathLocalAbs=%s, hList=%RU64, cListHandles=%RU32\n",
     1459                                             pInfo->pszPathLocalAbs, pInfo->hList, pTransfer->cListHandles));
    14431460
    14441461                                *phList = pInfo->hList;
     
    15331550
    15341551            RTListNodeRemove(&pInfo->Node);
     1552
     1553            Assert(pTransfer->cListHandles);
     1554            pTransfer->cListHandles--;
    15351555
    15361556            RTMemFree(pInfo);
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