@@ -636,6 +636,15 @@ MEM_STATIC void ZSTD_cwksp_clear(ZSTD_cwksp* ws) {
636
636
ZSTD_cwksp_assert_internal_consistency (ws );
637
637
}
638
638
639
+ MEM_STATIC size_t ZSTD_cwksp_sizeof (const ZSTD_cwksp * ws ) {
640
+ return (size_t )((BYTE * )ws -> workspaceEnd - (BYTE * )ws -> workspace );
641
+ }
642
+
643
+ MEM_STATIC size_t ZSTD_cwksp_used (const ZSTD_cwksp * ws ) {
644
+ return (size_t )((BYTE * )ws -> tableEnd - (BYTE * )ws -> workspace )
645
+ + (size_t )((BYTE * )ws -> workspaceEnd - (BYTE * )ws -> allocStart );
646
+ }
647
+
639
648
/**
640
649
* The provided workspace takes ownership of the buffer [start, start+size).
641
650
* Any existing values in the workspace are ignored (the previously managed
@@ -667,6 +676,11 @@ MEM_STATIC size_t ZSTD_cwksp_create(ZSTD_cwksp* ws, size_t size, ZSTD_customMem
667
676
MEM_STATIC void ZSTD_cwksp_free (ZSTD_cwksp * ws , ZSTD_customMem customMem ) {
668
677
void * ptr = ws -> workspace ;
669
678
DEBUGLOG (4 , "cwksp: freeing workspace" );
679
+ #if ZSTD_MEMORY_SANITIZER && !defined(ZSTD_MSAN_DONT_POISON_WORKSPACE )
680
+ if (ptr != NULL && customMem .customFree != NULL ) {
681
+ __msan_unpoison (ptr , ZSTD_cwksp_sizeof (ws ));
682
+ }
683
+ #endif
670
684
ZSTD_memset (ws , 0 , sizeof (ZSTD_cwksp ));
671
685
ZSTD_customFree (ptr , customMem );
672
686
}
@@ -680,15 +694,6 @@ MEM_STATIC void ZSTD_cwksp_move(ZSTD_cwksp* dst, ZSTD_cwksp* src) {
680
694
ZSTD_memset (src , 0 , sizeof (ZSTD_cwksp ));
681
695
}
682
696
683
- MEM_STATIC size_t ZSTD_cwksp_sizeof (const ZSTD_cwksp * ws ) {
684
- return (size_t )((BYTE * )ws -> workspaceEnd - (BYTE * )ws -> workspace );
685
- }
686
-
687
- MEM_STATIC size_t ZSTD_cwksp_used (const ZSTD_cwksp * ws ) {
688
- return (size_t )((BYTE * )ws -> tableEnd - (BYTE * )ws -> workspace )
689
- + (size_t )((BYTE * )ws -> workspaceEnd - (BYTE * )ws -> allocStart );
690
- }
691
-
692
697
MEM_STATIC int ZSTD_cwksp_reserve_failed (const ZSTD_cwksp * ws ) {
693
698
return ws -> allocFailed ;
694
699
}
0 commit comments