1
1
#region Copyright and License
2
- // Copyright 2010..2022 Alexander Reinert
2
+ // Copyright 2010..2023 Alexander Reinert
3
3
//
4
4
// This file is part of the ARSoft.Tools.Net - C# DNS client/server and SPF Library (https://github.com/alexreinert/ARSoft.Tools.Net)
5
5
//
@@ -232,6 +232,9 @@ public static string ToBase32HexString(this byte[] inArray, int offset, int leng
232
232
233
233
private static byte [ ] FromBase32CharArray ( this char [ ] inData , int offset , int length , Dictionary < char , byte > alphabet )
234
234
{
235
+ if ( length == 0 )
236
+ return Array . Empty < byte > ( ) ;
237
+
235
238
int paddingCount = 0 ;
236
239
while ( paddingCount < 6 )
237
240
{
@@ -278,7 +281,7 @@ private static byte[] FromBase32CharArray(this char[] inData, int offset, int le
278
281
}
279
282
280
283
res [ outPos ++ ] = ( byte ) ( ( buffer [ 0 ] << 3 ) | ( ( buffer [ 1 ] >> 2 ) & 0x07 ) ) ;
281
- res [ outPos ++ ] = ( byte ) ( ( ( buffer [ 1 ] >> 6 ) & 0xc0 ) | ( buffer [ 2 ] << 1 ) | ( ( buffer [ 3 ] >> 4 ) & 0x01 ) ) ;
284
+ res [ outPos ++ ] = ( byte ) ( ( ( buffer [ 1 ] << 6 ) & 0xc0 ) | ( buffer [ 2 ] << 1 ) | ( ( buffer [ 3 ] >> 4 ) & 0x01 ) ) ;
282
285
res [ outPos ++ ] = ( byte ) ( ( ( buffer [ 3 ] << 4 ) & 0xf0 ) | ( ( buffer [ 4 ] >> 1 ) & 0x0f ) ) ;
283
286
res [ outPos ++ ] = ( byte ) ( ( ( buffer [ 4 ] << 7 ) & 0x80 ) | ( buffer [ 5 ] << 2 ) | ( ( buffer [ 6 ] >> 3 ) & 0x03 ) ) ;
284
287
res [ outPos ++ ] = ( byte ) ( ( ( buffer [ 6 ] << 5 ) & 0xe0 ) | buffer [ 7 ] ) ;
@@ -298,16 +301,16 @@ private static byte[] FromBase32CharArray(this char[] inData, int offset, int le
298
301
break ;
299
302
case 2 :
300
303
res [ outPos ++ ] = ( byte ) ( ( buffer [ 0 ] << 3 ) | ( ( buffer [ 1 ] >> 2 ) & 0x07 ) ) ;
301
- res [ outPos ] = ( byte ) ( ( ( buffer [ 1 ] >> 6 ) & 0xc0 ) | ( buffer [ 2 ] << 1 ) | ( ( buffer [ 3 ] >> 4 ) & 0x01 ) ) ;
304
+ res [ outPos ] = ( byte ) ( ( ( buffer [ 1 ] << 6 ) & 0xc0 ) | ( buffer [ 2 ] << 1 ) | ( ( buffer [ 3 ] >> 4 ) & 0x01 ) ) ;
302
305
break ;
303
306
case 3 :
304
307
res [ outPos ++ ] = ( byte ) ( ( buffer [ 0 ] << 3 ) | ( ( buffer [ 1 ] >> 2 ) & 0x07 ) ) ;
305
- res [ outPos ++ ] = ( byte ) ( ( ( buffer [ 1 ] >> 6 ) & 0xc0 ) | ( buffer [ 2 ] << 1 ) | ( ( buffer [ 3 ] >> 4 ) & 0x01 ) ) ;
308
+ res [ outPos ++ ] = ( byte ) ( ( ( buffer [ 1 ] << 6 ) & 0xc0 ) | ( buffer [ 2 ] << 1 ) | ( ( buffer [ 3 ] >> 4 ) & 0x01 ) ) ;
306
309
res [ outPos ] = ( byte ) ( ( ( buffer [ 3 ] << 4 ) & 0xf0 ) | ( ( buffer [ 4 ] >> 1 ) & 0x0f ) ) ;
307
310
break ;
308
311
case 4 :
309
312
res [ outPos ++ ] = ( byte ) ( ( buffer [ 0 ] << 3 ) | ( ( buffer [ 1 ] >> 2 ) & 0x07 ) ) ;
310
- res [ outPos ++ ] = ( byte ) ( ( ( buffer [ 1 ] >> 6 ) & 0xc0 ) | ( buffer [ 2 ] << 1 ) | ( ( buffer [ 3 ] >> 4 ) & 0x01 ) ) ;
313
+ res [ outPos ++ ] = ( byte ) ( ( ( buffer [ 1 ] << 6 ) & 0xc0 ) | ( buffer [ 2 ] << 1 ) | ( ( buffer [ 3 ] >> 4 ) & 0x01 ) ) ;
311
314
res [ outPos ++ ] = ( byte ) ( ( ( buffer [ 3 ] << 4 ) & 0xf0 ) | ( ( buffer [ 4 ] >> 1 ) & 0x0f ) ) ;
312
315
res [ outPos ] = ( byte ) ( ( ( buffer [ 4 ] << 7 ) & 0x80 ) | ( buffer [ 5 ] << 2 ) | ( ( buffer [ 6 ] >> 3 ) & 0x03 ) ) ;
313
316
break ;
@@ -494,6 +497,9 @@ private static byte[] FromBase64CharArray(this char[] inData, int offset, int le
494
497
int paddingCount ;
495
498
int remain ;
496
499
500
+ if ( length == 0 )
501
+ return Array . Empty < byte > ( ) ;
502
+
497
503
if ( alphabet [ inData [ offset + length - 2 ] ] == 64 )
498
504
{
499
505
paddingCount = 2 ;
0 commit comments