Changeset 84996 in vbox for trunk/src/VBox/HostServices
- Timestamp:
- Jun 29, 2020 4:21:34 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 138891
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp
r84142 r84996 791 791 if (cParms >= VBOX_SHCL_CPARMS_REPLY_MIN) 792 792 { 793 uint32_t cbPayload = 0;794 795 793 /* aParms[0] has the context ID. */ 796 794 rc = HGCMSvcGetU32(&aParms[1], &pReply->uType); … … 798 796 rc = HGCMSvcGetU32(&aParms[2], &pReply->rc); 799 797 if (RT_SUCCESS(rc)) 800 rc = HGCMSvcGetU32(&aParms[3], &cbPayload); 801 if (RT_SUCCESS(rc)) 802 { 803 rc = HGCMSvcGetPv(&aParms[4], &pReply->pvPayload, &pReply->cbPayload); 804 AssertReturn(cbPayload == pReply->cbPayload, VERR_INVALID_PARAMETER); 805 } 798 rc = HGCMSvcGetPv(&aParms[3], &pReply->pvPayload, &pReply->cbPayload); 806 799 807 800 if (RT_SUCCESS(rc)) … … 809 802 rc = VERR_INVALID_PARAMETER; /* Play safe. */ 810 803 804 const unsigned idxParm = VBOX_SHCL_CPARMS_REPLY_MIN; 805 811 806 switch (pReply->uType) 812 807 { 813 808 case VBOX_SHCL_REPLYMSGTYPE_TRANSFER_STATUS: 814 809 { 815 if (cParms > = 6)816 rc = HGCMSvcGetU32(&aParms[ 5], &pReply->u.TransferStatus.uStatus);810 if (cParms > idxParm) 811 rc = HGCMSvcGetU32(&aParms[idxParm], &pReply->u.TransferStatus.uStatus); 817 812 818 813 LogFlowFunc(("uTransferStatus=%RU32\n", pReply->u.TransferStatus.uStatus)); … … 822 817 case VBOX_SHCL_REPLYMSGTYPE_LIST_OPEN: 823 818 { 824 if (cParms > = 6)825 rc = HGCMSvcGetU64(&aParms[ 5], &pReply->u.ListOpen.uHandle);819 if (cParms > idxParm) 820 rc = HGCMSvcGetU64(&aParms[idxParm], &pReply->u.ListOpen.uHandle); 826 821 827 822 LogFlowFunc(("hListOpen=%RU64\n", pReply->u.ListOpen.uHandle)); … … 831 826 case VBOX_SHCL_REPLYMSGTYPE_LIST_CLOSE: 832 827 { 833 if (cParms > = 6)834 rc = HGCMSvcGetU64(&aParms[ 5], &pReply->u.ListClose.uHandle);828 if (cParms > idxParm) 829 rc = HGCMSvcGetU64(&aParms[idxParm], &pReply->u.ListClose.uHandle); 835 830 836 831 LogFlowFunc(("hListClose=%RU64\n", pReply->u.ListClose.uHandle)); … … 840 835 case VBOX_SHCL_REPLYMSGTYPE_OBJ_OPEN: 841 836 { 842 if (cParms > = 6)843 rc = HGCMSvcGetU64(&aParms[ 5], &pReply->u.ObjOpen.uHandle);837 if (cParms > idxParm) 838 rc = HGCMSvcGetU64(&aParms[idxParm], &pReply->u.ObjOpen.uHandle); 844 839 845 840 LogFlowFunc(("hObjOpen=%RU64\n", pReply->u.ObjOpen.uHandle)); … … 849 844 case VBOX_SHCL_REPLYMSGTYPE_OBJ_CLOSE: 850 845 { 851 if (cParms > = 6)852 rc = HGCMSvcGetU64(&aParms[ 5], &pReply->u.ObjClose.uHandle);846 if (cParms > idxParm) 847 rc = HGCMSvcGetU64(&aParms[idxParm], &pReply->u.ObjClose.uHandle); 853 848 854 849 LogFlowFunc(("hObjClose=%RU64\n", pReply->u.ObjClose.uHandle)); … … 947 942 if (cParms == VBOX_SHCL_CPARMS_LIST_OPEN) 948 943 { 949 uint32_t cbPath = 0;950 uint32_t cbFilter = 0;951 952 944 rc = HGCMSvcGetU32(&aParms[1], &pOpenParms->fList); 953 945 if (RT_SUCCESS(rc)) 954 rc = HGCMSvcGetU32(&aParms[2], &cbFilter); 955 if (RT_SUCCESS(rc)) 956 { 957 rc = HGCMSvcGetStr(&aParms[3], &pOpenParms->pszFilter, &pOpenParms->cbFilter); 958 AssertReturn(cbFilter == pOpenParms->cbFilter, VERR_INVALID_PARAMETER); 959 } 960 if (RT_SUCCESS(rc)) 961 rc = HGCMSvcGetU32(&aParms[4], &cbPath); 962 if (RT_SUCCESS(rc)) 963 { 964 rc = HGCMSvcGetStr(&aParms[5], &pOpenParms->pszPath, &pOpenParms->cbPath); 965 AssertReturn(cbPath == pOpenParms->cbPath, VERR_INVALID_PARAMETER); 966 } 946 rc = HGCMSvcGetStr(&aParms[2], &pOpenParms->pszFilter, &pOpenParms->cbFilter); 947 if (RT_SUCCESS(rc)) 948 rc = HGCMSvcGetStr(&aParms[3], &pOpenParms->pszPath, &pOpenParms->cbPath); 967 949 968 950 /** @todo Some more validation. */ … … 993 975 HGCMSvcSetU64(&aParms[0], idCtx); 994 976 HGCMSvcSetU32(&aParms[1], pOpenParms->fList); 995 HGCMSvcSetU32(&aParms[2], pOpenParms->cbFilter); 996 HGCMSvcSetPv (&aParms[3], pOpenParms->pszFilter, pOpenParms->cbFilter); 997 HGCMSvcSetU32(&aParms[4], pOpenParms->cbPath); 998 HGCMSvcSetPv (&aParms[5], pOpenParms->pszPath, pOpenParms->cbPath); 999 HGCMSvcSetU64(&aParms[6], 0); /* OUT: uHandle */ 977 HGCMSvcSetPv (&aParms[2], pOpenParms->pszFilter, pOpenParms->cbFilter); 978 HGCMSvcSetPv (&aParms[3], pOpenParms->pszPath, pOpenParms->cbPath); 979 HGCMSvcSetU64(&aParms[4], 0); /* OUT: uHandle */ 1000 980 1001 981 rc = VINF_SUCCESS; … … 1623 1603 RT_ZERO(openCreateParms); 1624 1604 1625 uint32_t cbPath; 1626 rc = HGCMSvcGetU32(&aParms[2], &cbPath); /** @todo r=bird: This is an pointless parameter. */ 1627 if (RT_SUCCESS(rc)) 1628 { 1629 /** @todo r=bird: This is the wrong way of getting a string! */ 1630 rc = HGCMSvcGetPv(&aParms[3], (void **)&openCreateParms.pszPath, &openCreateParms.cbPath); 1631 if (cbPath != openCreateParms.cbPath) 1632 rc = VERR_INVALID_PARAMETER; 1633 } 1634 if (RT_SUCCESS(rc)) 1635 rc = HGCMSvcGetU32(&aParms[4], &openCreateParms.fCreate); 1605 /* aParms[1] will return the object handle on success; see below. */ 1606 rc = HGCMSvcGetStr(&aParms[2], &openCreateParms.pszPath, &openCreateParms.cbPath); 1607 if (RT_SUCCESS(rc)) 1608 rc = HGCMSvcGetU32(&aParms[3], &openCreateParms.fCreate); 1636 1609 1637 1610 if (RT_SUCCESS(rc))
Note:
See TracChangeset
for help on using the changeset viewer.