Skip to content

Commit 496824c

Browse files
authored
Avoid Unsafe.As in BitConverter (#112616)
1 parent 7cf676f commit 496824c

File tree

1 file changed

+25
-12
lines changed

1 file changed

+25
-12
lines changed

src/libraries/System.Private.CoreLib/src/System/BitConverter.cs

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4+
using System.Diagnostics;
45
using System.Runtime.CompilerServices;
56
using System.Runtime.InteropServices;
67
using System.Runtime.Intrinsics;
@@ -54,7 +55,8 @@ public static bool TryWriteBytes(Span<byte> destination, bool value)
5455
public static byte[] GetBytes(char value)
5556
{
5657
byte[] bytes = new byte[sizeof(char)];
57-
Unsafe.As<byte, char>(ref bytes[0]) = value;
58+
bool success = TryWriteBytes(bytes, value);
59+
Debug.Assert(success);
5860
return bytes;
5961
}
6062

@@ -81,7 +83,8 @@ public static bool TryWriteBytes(Span<byte> destination, char value)
8183
public static byte[] GetBytes(short value)
8284
{
8385
byte[] bytes = new byte[sizeof(short)];
84-
Unsafe.As<byte, short>(ref bytes[0]) = value;
86+
bool success = TryWriteBytes(bytes, value);
87+
Debug.Assert(success);
8588
return bytes;
8689
}
8790

@@ -108,7 +111,8 @@ public static bool TryWriteBytes(Span<byte> destination, short value)
108111
public static byte[] GetBytes(int value)
109112
{
110113
byte[] bytes = new byte[sizeof(int)];
111-
Unsafe.As<byte, int>(ref bytes[0]) = value;
114+
bool success = TryWriteBytes(bytes, value);
115+
Debug.Assert(success);
112116
return bytes;
113117
}
114118

@@ -135,7 +139,8 @@ public static bool TryWriteBytes(Span<byte> destination, int value)
135139
public static byte[] GetBytes(long value)
136140
{
137141
byte[] bytes = new byte[sizeof(long)];
138-
Unsafe.As<byte, long>(ref bytes[0]) = value;
142+
bool success = TryWriteBytes(bytes, value);
143+
Debug.Assert(success);
139144
return bytes;
140145
}
141146

@@ -162,7 +167,8 @@ public static bool TryWriteBytes(Span<byte> destination, long value)
162167
public static byte[] GetBytes(Int128 value)
163168
{
164169
byte[] bytes = new byte[Int128.Size];
165-
Unsafe.As<byte, Int128>(ref bytes[0]) = value;
170+
bool success = TryWriteBytes(bytes, value);
171+
Debug.Assert(success);
166172
return bytes;
167173
}
168174

@@ -190,7 +196,8 @@ public static bool TryWriteBytes(Span<byte> destination, Int128 value)
190196
public static byte[] GetBytes(ushort value)
191197
{
192198
byte[] bytes = new byte[sizeof(ushort)];
193-
Unsafe.As<byte, ushort>(ref bytes[0]) = value;
199+
bool success = TryWriteBytes(bytes, value);
200+
Debug.Assert(success);
194201
return bytes;
195202
}
196203

@@ -219,7 +226,8 @@ public static bool TryWriteBytes(Span<byte> destination, ushort value)
219226
public static byte[] GetBytes(uint value)
220227
{
221228
byte[] bytes = new byte[sizeof(uint)];
222-
Unsafe.As<byte, uint>(ref bytes[0]) = value;
229+
bool success = TryWriteBytes(bytes, value);
230+
Debug.Assert(success);
223231
return bytes;
224232
}
225233

@@ -248,7 +256,8 @@ public static bool TryWriteBytes(Span<byte> destination, uint value)
248256
public static byte[] GetBytes(ulong value)
249257
{
250258
byte[] bytes = new byte[sizeof(ulong)];
251-
Unsafe.As<byte, ulong>(ref bytes[0]) = value;
259+
bool success = TryWriteBytes(bytes, value);
260+
Debug.Assert(success);
252261
return bytes;
253262
}
254263

@@ -277,7 +286,8 @@ public static bool TryWriteBytes(Span<byte> destination, ulong value)
277286
public static byte[] GetBytes(UInt128 value)
278287
{
279288
byte[] bytes = new byte[UInt128.Size];
280-
Unsafe.As<byte, UInt128>(ref bytes[0]) = value;
289+
bool success = TryWriteBytes(bytes, value);
290+
Debug.Assert(success);
281291
return bytes;
282292
}
283293

@@ -305,7 +315,8 @@ public static bool TryWriteBytes(Span<byte> destination, UInt128 value)
305315
public static unsafe byte[] GetBytes(Half value)
306316
{
307317
byte[] bytes = new byte[sizeof(Half)];
308-
Unsafe.As<byte, Half>(ref bytes[0]) = value;
318+
bool success = TryWriteBytes(bytes, value);
319+
Debug.Assert(success);
309320
return bytes;
310321
}
311322

@@ -332,7 +343,8 @@ public static unsafe bool TryWriteBytes(Span<byte> destination, Half value)
332343
public static byte[] GetBytes(float value)
333344
{
334345
byte[] bytes = new byte[sizeof(float)];
335-
Unsafe.As<byte, float>(ref bytes[0]) = value;
346+
bool success = TryWriteBytes(bytes, value);
347+
Debug.Assert(success);
336348
return bytes;
337349
}
338350

@@ -359,7 +371,8 @@ public static bool TryWriteBytes(Span<byte> destination, float value)
359371
public static byte[] GetBytes(double value)
360372
{
361373
byte[] bytes = new byte[sizeof(double)];
362-
Unsafe.As<byte, double>(ref bytes[0]) = value;
374+
bool success = TryWriteBytes(bytes, value);
375+
Debug.Assert(success);
363376
return bytes;
364377
}
365378

0 commit comments

Comments
 (0)