mirror of
				https://github.com/facebook/zstd.git
				synced 2025-10-31 16:47:48 +02:00 
			
		
		
		
	[fuzz] Allow zero sized buffers for streaming fuzzers (#1945)
* Allow zero sized buffers in `stream_decompress`. Ensure that we never have two zero sized buffers in a row so we guarantee forwards progress. * Make case 4 in `stream_round_trip` do a zero sized buffers call followed by a full call to guarantee forwards progress. * Fix `limitCopy()` in legacy decoders. * Fix memcpy in `zstdmt_compress.c`. Catches the bug fixed in PR #1939
This commit is contained in:
		| @@ -3407,7 +3407,9 @@ static size_t ZBUFF_decompressWithDictionary(ZBUFF_DCtx* zbc, const void* src, s | ||||
| static size_t ZBUFF_limitCopy(void* dst, size_t maxDstSize, const void* src, size_t srcSize) | ||||
| { | ||||
|     size_t length = MIN(maxDstSize, srcSize); | ||||
|     memcpy(dst, src, length); | ||||
|     if (length > 0) { | ||||
|         memcpy(dst, src, length); | ||||
|     } | ||||
|     return length; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -3791,7 +3791,9 @@ static size_t ZBUFFv05_blockHeaderSize = 3; | ||||
| static size_t ZBUFFv05_limitCopy(void* dst, size_t maxDstSize, const void* src, size_t srcSize) | ||||
| { | ||||
|     size_t length = MIN(maxDstSize, srcSize); | ||||
|     memcpy(dst, src, length); | ||||
|     if (length > 0) { | ||||
|         memcpy(dst, src, length); | ||||
|     } | ||||
|     return length; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -4000,7 +4000,9 @@ size_t ZBUFFv06_decompressInit(ZBUFFv06_DCtx* zbd) | ||||
| MEM_STATIC size_t ZBUFFv06_limitCopy(void* dst, size_t dstCapacity, const void* src, size_t srcSize) | ||||
| { | ||||
|     size_t length = MIN(dstCapacity, srcSize); | ||||
|     memcpy(dst, src, length); | ||||
|     if (length > 0) { | ||||
|         memcpy(dst, src, length); | ||||
|     } | ||||
|     return length; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -4378,7 +4378,9 @@ size_t ZBUFFv07_decompressInit(ZBUFFv07_DCtx* zbd) | ||||
| MEM_STATIC size_t ZBUFFv07_limitCopy(void* dst, size_t dstCapacity, const void* src, size_t srcSize) | ||||
| { | ||||
|     size_t const length = MIN(dstCapacity, srcSize); | ||||
|     memcpy(dst, src, length); | ||||
|     if (length > 0) { | ||||
|         memcpy(dst, src, length); | ||||
|     } | ||||
|     return length; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user