diff options
| author | David M. Syzdek <david@syzdek.net> | 2022-08-19 10:46:56 -0800 |
|---|---|---|
| committer | David M. Syzdek <david@syzdek.net> | 2022-08-19 10:46:56 -0800 |
| commit | 59f8edd443a68e26e922d2a71e3a9aef64eda44a (patch) | |
| tree | 8d27edd2a352926d9bff2778716247dee60abe33 /lib/libbindle/lencoding.c | |
| parent | 2e7e034653ae51a6adbe61e8e418e9e43ffdb2ce (diff) | |
| download | bindletools-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.c | 41 |
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)) |
