Changeset 85856 in vbox for trunk/src/VBox/GuestHost
- Timestamp:
- Aug 21, 2020 9:06:50 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/GuestHost/SharedClipboard/clipboard-common.cpp
r85845 r85856 26 26 #include <iprt/rand.h> 27 27 #include <iprt/utf16.h> 28 29 #include <iprt/formats/bmp.h> 28 30 29 31 #include <iprt/errcore.h> … … 899 901 AssertPtrReturn(pcbDest, VERR_INVALID_POINTER); 900 902 901 P BMINFOHEADER pBitmapInfoHeader = (PBMINFOHEADER)pvSrc;903 PWINHDR pBmpWinHdr = (PWINHDR)pvSrc; 902 904 /** @todo Support all the many versions of the DIB headers. */ 903 if ( cbSrc < sizeof( BMINFOHEADER)904 || RT_LE2H_U32(pB itmapInfoHeader->uSize) < sizeof(BMINFOHEADER)905 || RT_LE2H_U32(pB itmapInfoHeader->uSize) != sizeof(BMINFOHEADER))905 if ( cbSrc < sizeof(WINHDR) 906 || RT_LE2H_U32(pBmpWinHdr->Size) < sizeof(WINHDR) 907 || RT_LE2H_U32(pBmpWinHdr->Size) != sizeof(WINHDR)) 906 908 { 907 909 return VERR_INVALID_PARAMETER; 908 910 } 909 911 910 size_t offPixel = sizeof(BM FILEHEADER)911 + RT_LE2H_U32(pB itmapInfoHeader->uSize)912 + RT_LE2H_U32(pB itmapInfoHeader->uClrUsed) * sizeof(uint32_t);912 size_t offPixel = sizeof(BMPINFO) 913 + RT_LE2H_U32(pBmpWinHdr->Size) 914 + RT_LE2H_U32(pBmpWinHdr->ClrUsed) * sizeof(uint32_t); 913 915 if (cbSrc < offPixel) 914 916 return VERR_INVALID_PARAMETER; 915 917 916 size_t cbDst = sizeof(BM FILEHEADER) + cbSrc;918 size_t cbDst = sizeof(BMPINFO) + cbSrc; 917 919 918 920 void *pvDest = RTMemAlloc(cbDst); … … 920 922 return VERR_NO_MEMORY; 921 923 922 PBM FILEHEADER pFileHeader = (PBMFILEHEADER)pvDest;923 924 p FileHeader->uType = BITMAPHEADERMAGIC;925 p FileHeader->uSize= (uint32_t)RT_H2LE_U32(cbDst);926 p FileHeader->uReserved1 = pFileHeader->uReserved2 = 0;927 p FileHeader->uOffBits= (uint32_t)RT_H2LE_U32(offPixel);928 929 memcpy((uint8_t *)pvDest + sizeof(BM FILEHEADER), pvSrc, cbSrc);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); 930 932 931 933 *ppvDest = pvDest; … … 943 945 AssertPtrReturn(pcbDest, VERR_INVALID_POINTER); 944 946 945 PBM FILEHEADER pFileHeader = (PBMFILEHEADER)pvSrc;946 if ( cbSrc < sizeof(BM FILEHEADER)947 || p FileHeader->uType != BITMAPHEADERMAGIC948 || RT_LE2H_U32(p FileHeader->uSize) != cbSrc)947 PBMPINFO pBmpHdr = (PBMPINFO)pvSrc; 948 if ( cbSrc < sizeof(BMPINFO) 949 || pBmpHdr->Type != BMP_HDR_MAGIC 950 || RT_LE2H_U32(pBmpHdr->FileSize) != cbSrc) 949 951 { 950 952 return VERR_INVALID_PARAMETER; 951 953 } 952 954 953 *ppvDest = ((uint8_t *)pvSrc) + sizeof(BM FILEHEADER);954 *pcbDest = cbSrc - sizeof(BM FILEHEADER);955 *ppvDest = ((uint8_t *)pvSrc) + sizeof(BMPINFO); 956 *pcbDest = cbSrc - sizeof(BMPINFO); 955 957 956 958 return VINF_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.