VirtualBox

Changeset 81322 in vbox


Ignore:
Timestamp:
Oct 17, 2019 3:09:15 PM (5 years ago)
Author:
vboxsync
Message:

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

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/GuestHost/SharedClipboard-transfers.h

    r81229 r81322  
    975975    /** The transfer's own event source. */
    976976    SHCLEVENTSOURCE          Events;
     977    /** Current number of concurrent list handles. */
     978    uint32_t                 cListHandles;
     979    /** Maximum number of concurrent list handles. */
     980    uint32_t                 cMaxListHandles;
    977981    /** Next upcoming list handle. */
    978982    SHCLLISTHANDLE           uListHandleNext;
     
    983987    /** List of root entries of this transfer. */
    984988    RTLISTANCHOR             lstRoots;
     989    /** Current number of concurrent object handles. */
     990    uint32_t                 cObjHandles;
     991    /** Maximum number of concurrent object handles. */
     992    uint32_t                 cMaxObjHandles;
    985993    /** Next upcoming object handle. */
    986994    SHCLOBJHANDLE            uObjHandleNext;
  • trunk/include/VBox/err.h

    r81167 r81322  
    29462946/** Maximum number of Shared Clipboard objects has been reached. */
    29472947#define VERR_SHCLPB_MAX_OBJECTS_REACHED             (-7101)
     2948/** Maximum number of Shared Clipboard lists has been reached. */
     2949#define VERR_SHCLPB_MAX_LISTS_REACHED               (-7102)
    29482950/** A Shared Clipboard list handle is invalid. */
    2949 #define VERR_SHCLPB_LIST_HANDLE_INVALID             (-7102)
     2951#define VERR_SHCLPB_LIST_HANDLE_INVALID             (-7103)
    29502952/** A Shared Clipboard objects handle is invalid. */
    2951 #define VERR_SHCLPB_OBJ_HANDLE_INVALID              (-7103)
     2953#define VERR_SHCLPB_OBJ_HANDLE_INVALID              (-7104)
    29522954/** A Shared Clipboard transfer ID is invalid. */
    2953 #define VERR_SHCLPB_TRANSFER_ID_NOT_FOUND           (-7104)
     2955#define VERR_SHCLPB_TRANSFER_ID_NOT_FOUND           (-7105)
    29542956/** @} */
    29552957/* SED-END */
  • 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.

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