@@ -496,6 +496,10 @@ auto uninitSlice(T, size_t N)(size_t[N] lengths...)
496
496
immutable len = lengths.lengthsProduct;
497
497
import std.array : uninitializedArray;
498
498
auto arr = uninitializedArray! (T[])(len);
499
+ version (mir_secure_memory)
500
+ {()@trusted {
501
+ (cast (ubyte [])arr)[] = 0 ;
502
+ }();}
499
503
return arr.sliced(lengths);
500
504
}
501
505
@@ -646,6 +650,10 @@ makeUninitSlice(T, Allocator, size_t N)(auto ref Allocator alloc, size_t[N] leng
646
650
auto mem = alloc.allocate(len * T.sizeof);
647
651
if (mem.length == 0 ) assert (0 );
648
652
auto array = () @trusted { return cast (T[]) mem; }();
653
+ version (mir_secure_memory)
654
+ {() @trusted {
655
+ (cast (ubyte [])array)[] = 0 ;
656
+ }();}
649
657
return array.sliced(lengths);
650
658
}
651
659
else
@@ -856,7 +864,13 @@ Slice!(T*, N) stdcUninitSlice(T, size_t N)(size_t[N] lengths...)
856
864
{
857
865
import core.stdc.stdlib : malloc;
858
866
immutable len = lengths.lengthsProduct;
859
- auto ptr = len ? cast (T* ) malloc(len * T.sizeof) : null ;
867
+ auto p = malloc(len * T.sizeof);
868
+ if (p is null ) assert (0 );
869
+ version (mir_secure_memory)
870
+ {
871
+ (cast (ubyte * )p)[0 .. len * T.sizeof] = 0 ;
872
+ }
873
+ auto ptr = len ? cast (T* ) p : null ;
860
874
return ptr.sliced(lengths);
861
875
}
862
876
@@ -892,6 +906,10 @@ See_also:
892
906
void stdcFreeSlice (T, size_t N)(Slice! (T* , N) slice)
893
907
{
894
908
import core.stdc.stdlib : free;
909
+ version (mir_secure_memory)
910
+ {
911
+ (cast (ubyte [])slice.field)[] = 0 ;
912
+ }
895
913
slice._iterator.free;
896
914
}
897
915
@@ -926,6 +944,10 @@ auto stdcUninitAlignedSlice(T, size_t N)(size_t[N] lengths, uint alignment) @sys
926
944
immutable len = lengths.lengthsProduct;
927
945
import mir.internal.memory: alignedAllocate;
928
946
auto arr = (cast (T* )alignedAllocate(len * T.sizeof, alignment))[0 .. len];
947
+ version (mir_secure_memory)
948
+ {
949
+ (cast (ubyte [])arr)[] = 0 ;
950
+ }
929
951
return arr.sliced(lengths);
930
952
}
931
953
@@ -951,5 +973,9 @@ See_also:
951
973
void stdcFreeAlignedSlice (T, size_t N)(Slice! (T* , N) slice)
952
974
{
953
975
import mir.internal.memory: alignedFree;
976
+ version (mir_secure_memory)
977
+ {
978
+ (cast (ubyte [])slice.field)[] = 0 ;
979
+ }
954
980
slice._iterator.alignedFree;
955
981
}
0 commit comments