Changeset 85864 in vbox for trunk/src/VBox/GuestHost/SharedClipboard
- Timestamp:
- Aug 21, 2020 12:44:56 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 140033
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/GuestHost/SharedClipboard/clipboard-common.cpp
r85856 r85864 901 901 AssertPtrReturn(pcbDest, VERR_INVALID_POINTER); 902 902 903 P WINHDR pBmpWinHdr = (PWINHDR)pvSrc;903 PBMPWIN3XINFOHDR coreHdr = (PBMPWIN3XINFOHDR)pvSrc; 904 904 /** @todo Support all the many versions of the DIB headers. */ 905 if ( cbSrc < sizeof( WINHDR)906 || RT_LE2H_U32( pBmpWinHdr->Size) < sizeof(WINHDR)907 || RT_LE2H_U32( pBmpWinHdr->Size) != sizeof(WINHDR))905 if ( cbSrc < sizeof(BMPWIN3XINFOHDR) 906 || RT_LE2H_U32(coreHdr->cbSize) < sizeof(BMPWIN3XINFOHDR) 907 || RT_LE2H_U32(coreHdr->cbSize) != sizeof(BMPWIN3XINFOHDR)) 908 908 { 909 909 return VERR_INVALID_PARAMETER; 910 910 } 911 911 912 size_t offPixel = sizeof(BMP INFO)913 + RT_LE2H_U32( pBmpWinHdr->Size)914 + RT_LE2H_U32( pBmpWinHdr->ClrUsed) * sizeof(uint32_t);912 size_t offPixel = sizeof(BMPFILEHDR) 913 + RT_LE2H_U32(coreHdr->cbSize) 914 + RT_LE2H_U32(coreHdr->cClrUsed) * sizeof(uint32_t); 915 915 if (cbSrc < offPixel) 916 916 return VERR_INVALID_PARAMETER; 917 917 918 size_t cbDst = sizeof(BMP INFO) + cbSrc;918 size_t cbDst = sizeof(BMPFILEHDR) + cbSrc; 919 919 920 920 void *pvDest = RTMemAlloc(cbDst); … … 922 922 return VERR_NO_MEMORY; 923 923 924 PBMPINFO pBmpHdr = (PBMPINFO)pvDest; 925 926 pBmpHdr->Type = BMP_HDR_MAGIC; 927 pBmpHdr->FileSize = (uint32_t)RT_H2LE_U32(cbDst); 928 pBmpHdr->Reserved1 = pBmpHdr->Reserved2 = 0; 929 pBmpHdr->Offset = (uint32_t)RT_H2LE_U32(offPixel); 930 931 memcpy((uint8_t *)pvDest + sizeof(BMPINFO), pvSrc, cbSrc); 924 PBMPFILEHDR fileHdr = (PBMPFILEHDR)pvDest; 925 926 fileHdr->uType = BMP_HDR_MAGIC; 927 fileHdr->cbFileSize = (uint32_t)RT_H2LE_U32(cbDst); 928 fileHdr->Reserved1 = 0; 929 fileHdr->Reserved2 = 0; 930 fileHdr->offBits = (uint32_t)RT_H2LE_U32(offPixel); 931 932 memcpy((uint8_t *)pvDest + sizeof(BMPFILEHDR), pvSrc, cbSrc); 932 933 933 934 *ppvDest = pvDest; … … 945 946 AssertPtrReturn(pcbDest, VERR_INVALID_POINTER); 946 947 947 PBMP INFO pBmpHdr = (PBMPINFO)pvSrc;948 if ( cbSrc < sizeof(BMP INFO)949 || pBmpHdr-> Type != BMP_HDR_MAGIC950 || RT_LE2H_U32(pBmpHdr-> FileSize) != cbSrc)948 PBMPFILEHDR pBmpHdr = (PBMPFILEHDR)pvSrc; 949 if ( cbSrc < sizeof(BMPFILEHDR) 950 || pBmpHdr->uType != BMP_HDR_MAGIC 951 || RT_LE2H_U32(pBmpHdr->cbFileSize) != cbSrc) 951 952 { 952 953 return VERR_INVALID_PARAMETER; 953 954 } 954 955 955 *ppvDest = ((uint8_t *)pvSrc) + sizeof(BMP INFO);956 *pcbDest = cbSrc - sizeof(BMP INFO);956 *ppvDest = ((uint8_t *)pvSrc) + sizeof(BMPFILEHDR); 957 *pcbDest = cbSrc - sizeof(BMPFILEHDR); 957 958 958 959 return VINF_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.