fixed length bug
This commit is contained in:
+6
-7
@@ -312,23 +312,22 @@ void Wallet::encode(char (&buf)[ADDRESS_LENGTH]) const
|
|||||||
// Encode to base58 with variable-length data
|
// Encode to base58 with variable-length data
|
||||||
const int actual_num_full_blocks = static_cast<int>(total_data_size / sizeof(uint64_t));
|
const int actual_num_full_blocks = static_cast<int>(total_data_size / sizeof(uint64_t));
|
||||||
const int actual_last_block_bytes = static_cast<int>(total_data_size % sizeof(uint64_t));
|
const int actual_last_block_bytes = static_cast<int>(total_data_size % sizeof(uint64_t));
|
||||||
const int actual_last_block_size_index = actual_last_block_bytes > 0 ? block_sizes_lookup[actual_last_block_bytes] : -1;
|
|
||||||
|
|
||||||
int buf_index = 0;
|
int buf_index = 0;
|
||||||
for (int i = 0; i <= actual_num_full_blocks; ++i) {
|
for (int i = 0; i <= actual_num_full_blocks; ++i) {
|
||||||
const bool is_last_block = (i == actual_num_full_blocks);
|
const bool is_last_block = (i == actual_num_full_blocks);
|
||||||
const int bytes_in_block = is_last_block ? actual_last_block_bytes : static_cast<int>(sizeof(uint64_t));
|
const int bytes_in_block = is_last_block ? actual_last_block_bytes : static_cast<int>(sizeof(uint64_t));
|
||||||
|
|
||||||
if (is_last_block && bytes_in_block == 0) break;
|
if (is_last_block && bytes_in_block == 0) break;
|
||||||
|
|
||||||
// Read bytes in big-endian
|
// Read bytes in big-endian
|
||||||
uint64_t n = 0;
|
uint64_t n = 0;
|
||||||
for (int j = 0; j < bytes_in_block; ++j) {
|
for (int j = 0; j < bytes_in_block; ++j) {
|
||||||
n = (n << 8) | data[i * sizeof(uint64_t) + j];
|
n = (n << 8) | data[i * sizeof(uint64_t) + j];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine output block size
|
// Determine output block size - use block_sizes directly indexed by byte count
|
||||||
const int output_block_size = is_last_block ? block_sizes[actual_last_block_size_index] : block_sizes.back();
|
const int output_block_size = is_last_block ? block_sizes[actual_last_block_bytes] : block_sizes.back();
|
||||||
|
|
||||||
// Encode to base58
|
// Encode to base58
|
||||||
for (int j = output_block_size - 1; j >= 0; --j) {
|
for (int j = output_block_size - 1; j >= 0; --j) {
|
||||||
|
|||||||
Reference in New Issue
Block a user