diff options
author | kklionz <85677209+kklionz@users.noreply.github.com> | 2022-06-29 21:00:31 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-29 16:00:31 +0300 |
commit | c7ce4601af61e6a16dc3461738215270eb96313b (patch) | |
tree | d10b027131eba5cd95306996b8c119554197afe5 /exporting | |
parent | d80b5dd149b0e1938fe871851ad1a67fdc717b81 (diff) |
fix: fix a base64_encode bug (#13074)
Diffstat (limited to 'exporting')
-rw-r--r-- | exporting/init_connectors.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/exporting/init_connectors.c b/exporting/init_connectors.c index 69ea0685cf..bfb6525ea6 100644 --- a/exporting/init_connectors.c +++ b/exporting/init_connectors.c @@ -117,7 +117,7 @@ static size_t base64_encode(unsigned char *input, size_t input_size, char *outpu return 0; } size_t count = 0; - while (input_size > 3) { + while (input_size >= 3) { value = ((input[0] << 16) + (input[1] << 8) + input[2]) & 0xffffff; output[0] = lookup[value >> 18]; output[1] = lookup[(value >> 12) & 0x3f]; @@ -138,6 +138,7 @@ static size_t base64_encode(unsigned char *input, size_t input_size, char *outpu output[3] = '='; //error("Base-64 encode (%06x) -> %c %c %c %c\n", (value>>2)&0xffff, output[0], output[1], output[2], output[3]); count += 4; + output[4] = '\0'; break; case 1: value = input[0] << 4; @@ -147,10 +148,13 @@ static size_t base64_encode(unsigned char *input, size_t input_size, char *outpu output[3] = '='; //error("Base-64 encode (%06x) -> %c %c %c %c\n", value, output[0], output[1], output[2], output[3]); count += 4; + output[4] = '\0'; break; case 0: + output[0] = '\0'; break; } + return count; } @@ -199,7 +203,7 @@ void simple_connector_init(struct instance *instance) char *encoded_credentials = callocz(1, encoded_size); base64_encode((unsigned char*)buffer_tostring(auth_string), buffer_strlen(auth_string), encoded_credentials, encoded_size); - + buffer_flush(auth_string); buffer_sprintf(auth_string, "Authorization: Basic %s\n", encoded_credentials); |