aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/lib/libbindle/lencoding.c
diff options
context:
space:
mode:
authorDavid M. Syzdek <david@syzdek.net>2022-08-19 10:46:56 -0800
committerDavid M. Syzdek <david@syzdek.net>2022-08-19 10:46:56 -0800
commit59f8edd443a68e26e922d2a71e3a9aef64eda44a (patch)
tree8d27edd2a352926d9bff2778716247dee60abe33 /lib/libbindle/lencoding.c
parent2e7e034653ae51a6adbe61e8e418e9e43ffdb2ce (diff)
downloadbindletools-59f8edd443a68e26e922d2a71e3a9aef64eda44a.tar.gz
bindletools-59f8edd443a68e26e922d2a71e3a9aef64eda44a.tar.bz2
bindletools-59f8edd443a68e26e922d2a71e3a9aef64eda44a.tar.xz
bindletools-59f8edd443a68e26e922d2a71e3a9aef64eda44a.zip
libbindle: fixing type casting in bindle_base32_encode()
Diffstat (limited to 'lib/libbindle/lencoding.c')
-rw-r--r--lib/libbindle/lencoding.c41
1 files changed, 22 insertions, 19 deletions
diff --git a/lib/libbindle/lencoding.c b/lib/libbindle/lencoding.c
index 9542d51..43d7e4e 100644
--- a/lib/libbindle/lencoding.c
+++ b/lib/libbindle/lencoding.c
@@ -68,7 +68,7 @@ bindle_base32_encode(
68 const char * map, 68 const char * map,
69 char * dst, 69 char * dst,
70 size_t s, 70 size_t s,
71 const int8_t * src, 71 const uint8_t * src,
72 size_t n, 72 size_t n,
73 int nopad ); 73 int nopad );
74 74
@@ -387,19 +387,22 @@ bindle_base32_encode(
387 const char * map, 387 const char * map,
388 char * dst, 388 char * dst,
389 size_t s, 389 size_t s,
390 const int8_t * src, 390 const uint8_t * src,
391 size_t n, 391 size_t n,
392 int nopad ) 392 int nopad )
393{ 393{
394 ssize_t len; 394 ssize_t len;
395 size_t dpos; 395 size_t dpos;
396 size_t spos; 396 size_t spos;
397 size_t byte; 397 size_t byte;
398 uint8_t * dat;
398 399
399 assert(dst != NULL); 400 assert(dst != NULL);
400 assert(src != NULL); 401 assert(src != NULL);
401 assert(s > 0); 402 assert(s > 0);
402 403
404 dat = (uint8_t *)dst;
405
403 // calculates each digit's value 406 // calculates each digit's value
404 byte = 0; 407 byte = 0;
405 dpos = 0; 408 dpos = 0;
@@ -411,35 +414,35 @@ bindle_base32_encode(
411 switch(byte) 414 switch(byte)
412 { 415 {
413 case 0: 416 case 0:
414 dst[dpos++] = src[spos] >> 3; // 5 MSB 417 dat[dpos++] = src[spos] >> 3; // 5 MSB
415 dst[dpos++] = (src[spos] & 0x07) << 2; // 3 LSB 2 bits unused 418 dat[dpos++] = (src[spos] & 0x07) << 2; // 3 LSB 2 bits unused
416 byte++; 419 byte++;
417 break; 420 break;
418 421
419 case 1: 422 case 1:
420 dst[dpos-1] |= (src[spos] >> 6) & 0x03; // 2 MSB 423 dat[dpos-1] |= (src[spos] >> 6) & 0x03; // 2 MSB
421 dst[dpos++] = (src[spos] >> 1) & 0x1f ; // 5 MB 424 dat[dpos++] = (src[spos] >> 1) & 0x1f ; // 5 MB
422 dst[dpos++] = (src[spos] << 4) & 0x10; // 1 LSB 4 bits unused 425 dat[dpos++] = (src[spos] << 4) & 0x10; // 1 LSB 4 bits unused
423 byte++; 426 byte++;
424 break; 427 break;
425 428
426 case 2: 429 case 2:
427 dst[dpos-1] |= src[spos] >> 4; // 4 MSB 430 dat[dpos-1] |= src[spos] >> 4; // 4 MSB
428 dst[dpos++] = (src[spos] << 1) & 0x1e ; // 4 LSB 1 bits unused 431 dat[dpos++] = (src[spos] << 1) & 0x1e ; // 4 LSB 1 bits unused
429 byte++; 432 byte++;
430 break; 433 break;
431 434
432 case 3: 435 case 3:
433 dst[dpos-1] |= src[spos] >> 7; // 1 MSB 436 dat[dpos-1] |= src[spos] >> 7; // 1 MSB
434 dst[dpos++] = (src[spos] >> 2) & 0x1f ; // 5 MB 437 dat[dpos++] = (src[spos] >> 2) & 0x1f ; // 5 MB
435 dst[dpos++] = (src[spos] << 3) & 0x18 ; // 2 LSB 3 bits unused 438 dat[dpos++] = (src[spos] << 3) & 0x18 ; // 2 LSB 3 bits unused
436 byte++; 439 byte++;
437 break; 440 break;
438 441
439 case 4: 442 case 4:
440 default: 443 default:
441 dst[dpos-1] |= src[spos] >> 5; // 3 MSB 444 dat[dpos-1] |= src[spos] >> 5; // 3 MSB
442 dst[dpos++] = src[spos] & 0x1f; // 5 LSB 445 dat[dpos++] = src[spos] & 0x1f; // 5 LSB
443 byte = 0; 446 byte = 0;
444 break; 447 break;
445 }; 448 };
@@ -447,7 +450,7 @@ bindle_base32_encode(
447 450
448 // encodes each value 451 // encodes each value
449 for(len = 0; ((size_t)len) < dpos; len++) 452 for(len = 0; ((size_t)len) < dpos; len++)
450 dst[len] = map[(unsigned char)dst[len]]; 453 dst[len] = map[(unsigned char)dat[len]];
451 454
452 // add padding 455 // add padding
453 if (!(nopad)) 456 if (!(nopad))