VirtualBox

Changeset 102468 in vbox


Ignore:
Timestamp:
Dec 5, 2023 10:37:41 AM (15 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
160611
Message:

Shared Clipboard: Added a dedicated event type for the X11 requests/responses. Needed for union access. Added some more checks. ​bugref:10384

Location:
trunk
Files:
4 edited

Legend:

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

    r100684 r102468  
    168168
    169169/**
     170 * Enumeration for an X11 event type.
     171 */
     172typedef enum _SHCLX11EVENTTYPE
     173{
     174    /** Invalid event type. */
     175    SHCLX11EVENTTYPE_INVALID = 0,
     176    /** Reports formats to X11. */
     177    SHCLX11EVENTTYPE_REPORT_FORMATS,
     178    /** Reads clipboard from X11. */
     179    SHCLX11EVENTTYPE_READ
     180} SHCLX11EVENTTYPE;
     181/** Pointer to an enumeration for an X11 event type. */
     182typedef SHCLX11EVENTTYPE *PSHCLX11EVENTTYPE;
     183
     184/**
    170185 * Structure describing an X11 clipboard request.
    171186 */
     
    176191    /** Event associated to this request. */
    177192    PSHCLEVENT       pEvent;
     193    /** Request type for the union below. */
     194    SHCLX11EVENTTYPE enmType;
    178195    union
    179196    {
     
    204221typedef struct _SHCLX11RESPONSE
    205222{
    206     int rc;
    207     struct
     223    /** Response type for the union below. */
     224    SHCLX11EVENTTYPE enmType;
     225    /** rc (IPRT-style) of the operation performed as part of the X event thread. */
     226    int              rc;
     227    union
    208228    {
    209         void    *pvData;
    210         uint32_t cbData;
    211     } Read;
     229        struct
     230        {
     231            void    *pvData;
     232            uint32_t cbData;
     233        } Read;
     234    };
    212235} SHCLX11RESPONSE;
    213236/** Pointer to an X11 clipboard response. */
  • trunk/src/VBox/Additions/x11/VBoxClient/clipboard-x11.cpp

    r102462 r102468  
    9393                        if (pPayload)
    9494                        {
    95                             Assert(pPayload->cbData == sizeof(SHCLX11RESPONSE));
     95                            AssertReturnVoid(pPayload->cbData == sizeof(SHCLX11RESPONSE));
     96                            AssertReturnVoid(pPayload->pvData);
    9697                            PSHCLX11RESPONSE pResp = (PSHCLX11RESPONSE)pPayload->pvData;
     98                            AssertReturnVoid(pResp->enmType == SHCLX11EVENTTYPE_READ);
    9799
    98100                            rc = ShClTransferRootsInitFromStringListEx(pTransfer, (const char *)pResp->Read.pvData, pResp->Read.cbData,
     
    559561                                if (pPayload)
    560562                                {
    561                                     Assert(pPayload->cbData == sizeof(SHCLX11RESPONSE));
     563                                    AssertBreakStmt(pPayload->cbData == sizeof(SHCLX11RESPONSE), rc = VERR_INVALID_PARAMETER);
     564                                    AssertPtrBreakStmt(pPayload->pvData, rc = VERR_INVALID_POINTER);
    562565                                    PSHCLX11RESPONSE pResp = (PSHCLX11RESPONSE)pPayload->pvData;
     566                                    AssertBreakStmt(pResp->enmType == SHCLX11EVENTTYPE_READ, rc = VERR_INVALID_PARAMETER);
    563567
    564568                                    rc = VbglR3ClipboardWriteDataEx(&pCtx->CmdCtx, pEvent->u.fReadData,
  • trunk/src/VBox/GuestHost/SharedClipboard/clipboard-x11.cpp

    r102465 r102468  
    19801980
    19811981    PSHCLX11REQUEST pReq = (PSHCLX11REQUEST)pvUserData;
     1982    AssertReturnVoid(pReq->enmType == SHCLX11EVENTTYPE_REPORT_FORMATS);
    19821983
    19831984    PSHCLX11CTX pCtx     = pReq->pCtx;
     
    20202021    if (pReq)
    20212022    {
     2023        pReq->enmType          = SHCLX11EVENTTYPE_REPORT_FORMATS;
    20222024        pReq->pCtx             = pCtx;
    20232025        pReq->Formats.fFormats = uFormats;
     
    21212123
    21222124    /* Sanity. */
     2125    AssertReturnVoid(pReq->enmType == SHCLX11EVENTTYPE_READ);
    21232126    AssertReturnVoid(pReq->Read.uFmtVBox != VBOX_SHCL_FMT_NONE);
    21242127    AssertReturnVoid(pReq->Read.idxFmtX11 < SHCL_MAX_X11_FORMATS);
     
    23792382        if (pReq) /* Give some more clues, if available. */
    23802383        {
     2384            AssertReturnVoid(pReq->enmType == SHCLX11EVENTTYPE_READ);
    23812385            char *pszFmts = ShClFormatsToStrA(pReq->Read.uFmtVBox);
    23822386            AssertPtrReturnVoid(pszFmts);
     
    24752479
    24762480    PSHCLX11REQUEST   pReq = (PSHCLX11REQUEST)pvUserData;
     2481    AssertReturnVoid(pReq->enmType == SHCLX11EVENTTYPE_READ);
    24772482    SHCLX11CTX       *pCtx = pReq->pCtx;
    24782483    AssertPtrReturnVoid(pCtx);
     
    25822587    if (pReq)
    25832588    {
     2589        pReq->enmType       = SHCLX11EVENTTYPE_READ;
    25842590        pReq->pCtx          = pCtx;
    25852591        pReq->Read.uFmtVBox = uFmt;
     
    26362642                if (pPayload)
    26372643                {
    2638                     Assert(pPayload->cbData == sizeof(SHCLX11RESPONSE));
     2644                    AssertReturn(pPayload->cbData == sizeof(SHCLX11RESPONSE), VERR_INVALID_PARAMETER);
     2645                    AssertPtrReturn(pPayload->pvData, VERR_INVALID_POINTER);
    26392646                    PSHCLX11RESPONSE pResp = (PSHCLX11RESPONSE)pPayload->pvData;
     2647                    AssertReturn(pResp->enmType == SHCLX11EVENTTYPE_READ, VERR_INVALID_PARAMETER);
    26402648
    26412649                    memcpy(pvBuf, pResp->Read.pvData, RT_MIN(cbBuf, pResp->Read.cbData));
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-x11.cpp

    r102467 r102468  
    307307                if (pPayload)
    308308                {
    309                     Assert(pPayload->cbData == sizeof(SHCLX11RESPONSE));
     309                    AssertReturn(pPayload->cbData == sizeof(SHCLX11RESPONSE), VERR_INVALID_PARAMETER);
     310                    AssertPtrReturn(pPayload->pvData, VERR_INVALID_POINTER);
    310311                    PSHCLX11RESPONSE pResp = (PSHCLX11RESPONSE)pPayload->pvData;
     312                    AssertReturn(pResp->enmType == SHCLX11EVENTTYPE_READ, VERR_INVALID_PARAMETER);
    311313
    312314                    uint32_t const cbRead = pResp->Read.cbData;
     
    732734                if (pPayload)
    733735                {
    734                     Assert(pPayload->cbData == sizeof(SHCLX11RESPONSE));
    735                     AssertPtr(pPayload->pvData);
     736                    AssertReturn(pPayload->cbData == sizeof(SHCLX11RESPONSE), VERR_INVALID_PARAMETER);
     737                    AssertPtrReturn(pPayload->pvData, VERR_INVALID_POINTER);
    736738                    PSHCLX11RESPONSE pResp = (PSHCLX11RESPONSE)pPayload->pvData;
     739                    AssertReturn(pResp->enmType == SHCLX11EVENTTYPE_READ, VERR_INVALID_PARAMETER);
    737740
    738741                    rc = ShClTransferRootsInitFromStringList(pCtx->pTransfer,
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