fix: fix a base64_encode bug (#13074)
kklionz committed
Jun 29, 2022 at 21:00 UTC
c7ce4601af61e6a16dc3461738215270eb96313b
1 file changed
+6
-2
exporting/init_connectors.c
+6
-2
@@ -117,7 +117,7 @@ static size_t base64_encode(unsigned char *input, size_t input_size, char *outpu
117
return 0;
118
}
119
size_t count = 0;
120
- while (input_size > 3) {
120
+ while (input_size >= 3) {
121
value = ((input[0] << 16) + (input[1] << 8) + input[2]) & 0xffffff;
122
output[0] = lookup[value >> 18];
123
output[1] = lookup[(value >> 12) & 0x3f];
@@ -138,6 +138,7 @@ static size_t base64_encode(unsigned char *input, size_t input_size, char *outpu
138
output[3] = '=';
139
//error("Base-64 encode (%06x) -> %c %c %c %c\n", (value>>2)&0xffff, output[0], output[1], output[2], output[3]);
140
count += 4;
141
+ output[4] = '\0';
142
break;
143
case 1:
144
value = input[0] << 4;
@@ -147,10 +148,13 @@ static size_t base64_encode(unsigned char *input, size_t input_size, char *outpu
148
output[3] = '=';
149
//error("Base-64 encode (%06x) -> %c %c %c %c\n", value, output[0], output[1], output[2], output[3]);
150
count += 4;
151
+ output[4] = '\0';
152
break;
153
case 0:
154
+ output[0] = '\0';
155
break;
156
}
157
+
158
return count;
159
}
160
@@ -199,7 +203,7 @@ void simple_connector_init(struct instance *instance)
203
char *encoded_credentials = callocz(1, encoded_size);
204
205
base64_encode((unsigned char*)buffer_tostring(auth_string), buffer_strlen(auth_string), encoded_credentials, encoded_size);
202
-
206
+
207
buffer_flush(auth_string);
208
buffer_sprintf(auth_string, "Authorization: Basic %s\n", encoded_credentials);
209