mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-10-31 16:28:05 +02:00 
			
		
		
		
	Revert "Bug 1966443: Use proper length for Windows clipboard elements r=win-reviewers,emilio,gstoll" for causing Bug 1968744
This reverts commit cff2580bc6b540ff1bb9b890d9cf79c1bcc563a5.
This commit is contained in:
		
							parent
							
								
									4777da5f47
								
							
						
					
					
						commit
						b7be7bd4a6
					
				
					 1 changed files with 22 additions and 28 deletions
				
			
		|  | @ -578,7 +578,6 @@ NS_IMETHODIMP nsClipboard::SetNativeClipboardData( | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| //-------------------------------------------------------------------------
 | //-------------------------------------------------------------------------
 | ||||||
| /* static */ |  | ||||||
| nsresult nsClipboard::GetGlobalData(HGLOBAL aHGBL, void** aData, | nsresult nsClipboard::GetGlobalData(HGLOBAL aHGBL, void** aData, | ||||||
|                                     uint32_t* aLen) { |                                     uint32_t* aLen) { | ||||||
|   MOZ_CLIPBOARD_LOG("%s", __FUNCTION__); |   MOZ_CLIPBOARD_LOG("%s", __FUNCTION__); | ||||||
|  | @ -701,29 +700,6 @@ HRESULT nsClipboard::FillSTGMedium(IDataObject* aDataObject, UINT aFormat, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| //-------------------------------------------------------------------------
 | //-------------------------------------------------------------------------
 | ||||||
| // Get the data out of the global data handle. The size we
 |  | ||||||
| // return should be the size returned from GetGlobalData(), since the
 |  | ||||||
| // string returned from Windows may have nulls inserted -- it may not
 |  | ||||||
| // even be null-terminated.  GetGlobalData adds bytes for null
 |  | ||||||
| // termination to the buffer but they are not considered in the returned
 |  | ||||||
| // byte count.  We check and skip the last counted byte if it is a null
 |  | ||||||
| // since Windows also appears to add null termination.  See GetGlobalData.
 |  | ||||||
| template <typename CharType> |  | ||||||
| static nsresult GetCharDataFromGlobalData(STGMEDIUM& aStm, CharType** aData, |  | ||||||
|                                    uint32_t* aLen) { |  | ||||||
|   uint32_t nBytes = 0; |  | ||||||
|   MOZ_TRY(nsClipboard::GetGlobalData(aStm.hGlobal, |  | ||||||
|                                      reinterpret_cast<void**>(aData), &nBytes)); |  | ||||||
|   auto nChars = nBytes / sizeof(CharType); |  | ||||||
|   if (nChars < 1) { |  | ||||||
|     *aLen = 0; |  | ||||||
|     return NS_OK; |  | ||||||
|   } |  | ||||||
|   bool hasNullTerminator = (*aData)[nChars - 1] == CharType(0); |  | ||||||
|   *aLen = hasNullTerminator ? nBytes - sizeof(CharType) : nBytes; |  | ||||||
|   return NS_OK; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // If aFormat is CF_DIBV5, aMIMEImageFormat must be a type for which we have
 | // If aFormat is CF_DIBV5, aMIMEImageFormat must be a type for which we have
 | ||||||
| // an image encoder (e.g. image/png).
 | // an image encoder (e.g. image/png).
 | ||||||
| // For other values of aFormat, it is OK to pass null for aMIMEImageFormat.
 | // For other values of aFormat, it is OK to pass null for aMIMEImageFormat.
 | ||||||
|  | @ -788,13 +764,31 @@ nsresult nsClipboard::GetNativeDataOffClipboard(IDataObject* aDataObject, | ||||||
|   // compile-time-constant format indicators:
 |   // compile-time-constant format indicators:
 | ||||||
|   switch (fe.cfFormat) { |   switch (fe.cfFormat) { | ||||||
|     case CF_TEXT: { |     case CF_TEXT: { | ||||||
|       return GetCharDataFromGlobalData(stm, reinterpret_cast<char**>(aData), |       // Get the data out of the global data handle. The size we
 | ||||||
|                                        aLen); |       // return should not include the null because the other
 | ||||||
|  |       // platforms don't use nulls, so just return the length we get
 | ||||||
|  |       // back from strlen(), since we know CF_TEXT is null
 | ||||||
|  |       // terminated. Recall that GetGlobalData() returns the size of
 | ||||||
|  |       // the allocated buffer, not the size of the data (on 98, these
 | ||||||
|  |       // are not the same) so we can't use that.
 | ||||||
|  |       uint32_t allocLen = 0; | ||||||
|  |       MOZ_TRY(GetGlobalData(stm.hGlobal, aData, &allocLen)); | ||||||
|  |       *aLen = strlen(reinterpret_cast<char*>(*aData)); | ||||||
|  |       return NS_OK; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     case CF_UNICODETEXT: { |     case CF_UNICODETEXT: { | ||||||
|       return GetCharDataFromGlobalData(stm, reinterpret_cast<char16_t**>(aData), |       // Get the data out of the global data handle. The size we
 | ||||||
|                                        aLen); |       // return should not include the null because the other
 | ||||||
|  |       // platforms don't use nulls, so just return the length we get
 | ||||||
|  |       // back from strlen(), since we know CF_UNICODETEXT is null
 | ||||||
|  |       // terminated. Recall that GetGlobalData() returns the size of
 | ||||||
|  |       // the allocated buffer, not the size of the data (on 98, these
 | ||||||
|  |       // are not the same) so we can't use that.
 | ||||||
|  |       uint32_t allocLen = 0; | ||||||
|  |       MOZ_TRY(GetGlobalData(stm.hGlobal, aData, &allocLen)); | ||||||
|  |       *aLen = NS_strlen(reinterpret_cast<char16_t*>(*aData)) * 2; | ||||||
|  |       return NS_OK; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     case CF_DIBV5: { |     case CF_DIBV5: { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 DonalMe
						DonalMe