System.Security.Tests.SecureStringTests.SecureStringMarshal_Unicode_Roundtrip C# (CSharp) Method

SecureStringMarshal_Unicode_Roundtrip() private method

private SecureStringMarshal_Unicode_Roundtrip ( int length, bool allocHGlobal ) : void
length int
allocHGlobal bool
return void
        public static void SecureStringMarshal_Unicode_Roundtrip(int length, bool allocHGlobal)
        {
            string input = new string(Enumerable
                .Range(0, length)
                .Select(i => (char)('a' + i)) // include non-ASCII chars
                .ToArray());

            IntPtr marshaledString = Marshal.StringToHGlobalUni(input);
            string expectedAnsi = Marshal.PtrToStringUni(marshaledString);
            Marshal.FreeHGlobal(marshaledString);

            using (SecureString ss = CreateSecureString(input))
            {
                IntPtr marshaledSecureString = allocHGlobal ?
                    SecureStringMarshal.SecureStringToGlobalAllocUnicode(ss) :
                    SecureStringMarshal.SecureStringToCoTaskMemUnicode(ss);

                string actualAnsi = Marshal.PtrToStringUni(marshaledSecureString);

                if (allocHGlobal)
                {
                    Marshal.FreeHGlobal(marshaledSecureString);
                }
                else
                {
                    Marshal.FreeCoTaskMem(marshaledSecureString);
                }

                Assert.Equal(expectedAnsi, actualAnsi);
            }
        }