sys/base64: fix return value when input data is empty

This commit is contained in:
Alexandre Abadie 2019-10-08 13:01:32 +02:00
parent d749e2de5d
commit 1d8e86c570
No known key found for this signature in database
GPG Key ID: 1C919A403CAE1405
2 changed files with 10 additions and 5 deletions

View File

@ -66,8 +66,9 @@ int base64_encode(const void *data_in, size_t data_in_size,
return BASE64_ERROR_DATA_IN; return BASE64_ERROR_DATA_IN;
} }
if (data_in_size < 1) { if (data_in_size == 0) {
return BASE64_ERROR_DATA_IN_SIZE; *base64_out_size = 0;
return BASE64_SUCCESS;
} }
if (*base64_out_size < required_size) { if (*base64_out_size < required_size) {
@ -170,6 +171,11 @@ int base64_decode(const unsigned char *base64_in, size_t base64_in_size,
return BASE64_ERROR_DATA_IN; return BASE64_ERROR_DATA_IN;
} }
if (base64_in_size == 0) {
*data_out_size = 0;
return BASE64_SUCCESS;
}
if (base64_in_size < 4) { if (base64_in_size < 4) {
return BASE64_ERROR_DATA_IN_SIZE; return BASE64_ERROR_DATA_IN_SIZE;
} }

View File

@ -71,8 +71,7 @@ static inline size_t base64_estimate_encode_size(size_t data_in_size)
BASE64_ERROR_BUFFER_OUT_SIZE on insufficient size for encoding to `base64_out`, BASE64_ERROR_BUFFER_OUT_SIZE on insufficient size for encoding to `base64_out`,
BASE64_ERROR_BUFFER_OUT if `base64_out` equals NULL BASE64_ERROR_BUFFER_OUT if `base64_out` equals NULL
but the `base64_out_size` is sufficient, but the `base64_out_size` is sufficient,
BASE64_ERROR_DATA_IN if `data_in` equals NULL, BASE64_ERROR_DATA_IN if `data_in` equals NULL.
BASE64_ERROR_DATA_IN_SIZE if `data_in_size` is less than 1.
*/ */
int base64_encode(const void *data_in, size_t data_in_size, int base64_encode(const void *data_in, size_t data_in_size,
unsigned char *base64_out, size_t *base64_out_size); unsigned char *base64_out, size_t *base64_out_size);
@ -93,7 +92,7 @@ int base64_encode(const void *data_in, size_t data_in_size,
BASE64_ERROR_BUFFER_OUT if `data_out` equals NULL BASE64_ERROR_BUFFER_OUT if `data_out` equals NULL
but the size for `data_out_size` is sufficient, but the size for `data_out_size` is sufficient,
BASE64_ERROR_DATA_IN if `base64_in` equals NULL, BASE64_ERROR_DATA_IN if `base64_in` equals NULL,
BASE64_ERROR_DATA_IN_SIZE if `base64_in_size` is less than 4. BASE64_ERROR_DATA_IN_SIZE if `base64_in_size` is between 1 and 4.
*/ */
int base64_decode(const unsigned char *base64_in, size_t base64_in_size, int base64_decode(const unsigned char *base64_in, size_t base64_in_size,
void *data_out, size_t *data_out_size); void *data_out, size_t *data_out_size);