@@ -496,6 +496,10 @@ auto uninitSlice(T, size_t N)(size_t[N] lengths...)
496496 immutable len = lengths.lengthsProduct;
497497 import std.array : uninitializedArray;
498498 auto arr = uninitializedArray! (T[])(len);
499+ version (mir_secure_memory)
500+ {()@trusted {
501+ (cast (ubyte [])arr)[] = 0 ;
502+ }();}
499503 return arr.sliced(lengths);
500504}
501505
@@ -646,6 +650,10 @@ makeUninitSlice(T, Allocator, size_t N)(auto ref Allocator alloc, size_t[N] leng
646650 auto mem = alloc.allocate(len * T.sizeof);
647651 if (mem.length == 0 ) assert (0 );
648652 auto array = () @trusted { return cast (T[]) mem; }();
653+ version (mir_secure_memory)
654+ {() @trusted {
655+ (cast (ubyte [])array)[] = 0 ;
656+ }();}
649657 return array.sliced(lengths);
650658 }
651659 else
@@ -856,7 +864,13 @@ Slice!(T*, N) stdcUninitSlice(T, size_t N)(size_t[N] lengths...)
856864{
857865 import core.stdc.stdlib : malloc;
858866 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 ;
860874 return ptr.sliced(lengths);
861875}
862876
@@ -892,6 +906,10 @@ See_also:
892906void stdcFreeSlice (T, size_t N)(Slice! (T* , N) slice)
893907{
894908 import core.stdc.stdlib : free;
909+ version (mir_secure_memory)
910+ {
911+ (cast (ubyte [])slice.field)[] = 0 ;
912+ }
895913 slice._iterator.free;
896914}
897915
@@ -926,6 +944,10 @@ auto stdcUninitAlignedSlice(T, size_t N)(size_t[N] lengths, uint alignment) @sys
926944 immutable len = lengths.lengthsProduct;
927945 import mir.internal.memory: alignedAllocate;
928946 auto arr = (cast (T* )alignedAllocate(len * T.sizeof, alignment))[0 .. len];
947+ version (mir_secure_memory)
948+ {
949+ (cast (ubyte [])arr)[] = 0 ;
950+ }
929951 return arr.sliced(lengths);
930952}
931953
@@ -951,5 +973,9 @@ See_also:
951973void stdcFreeAlignedSlice (T, size_t N)(Slice! (T* , N) slice)
952974{
953975 import mir.internal.memory: alignedFree;
976+ version (mir_secure_memory)
977+ {
978+ (cast (ubyte [])slice.field)[] = 0 ;
979+ }
954980 slice._iterator.alignedFree;
955981}
0 commit comments