curlx_base64_encode: use uint8_t* for input

Change `inputbuff` parameter from `const char *` to `const uint8_t *` to
reflect the binary nature of the input bytes. Half the code was casting
unsigned char to signed already in calling.

Closes #19722
This commit is contained in:
Stefan Eissing 2025-11-27 13:18:09 +01:00 committed by Daniel Stenberg
parent fd5a117a67
commit bbb929112b
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
19 changed files with 33 additions and 30 deletions

View file

@ -267,7 +267,7 @@ static CURLcode build_message(struct SASL *sasl, struct bufref *msg)
char *base64;
size_t base64len;
result = curlx_base64_encode((const char *) Curl_bufref_ptr(msg),
result = curlx_base64_encode(Curl_bufref_ptr(msg),
Curl_bufref_len(msg), &base64, &base64len);
if(!result)
Curl_bufref_set(msg, base64, base64len, curl_free);

View file

@ -66,7 +66,7 @@ static const unsigned char decodetable[] =
* @unittest: 1302
*/
CURLcode curlx_base64_decode(const char *src,
unsigned char **outptr, size_t *outlen)
uint8_t **outptr, size_t *outlen)
{
size_t srclen = 0;
size_t padding = 0;
@ -170,8 +170,8 @@ bad:
}
static CURLcode base64_encode(const char *table64,
unsigned char padbyte,
const char *inputbuff, size_t insize,
uint8_t padbyte,
const uint8_t *inputbuff, size_t insize,
char **outptr, size_t *outlen)
{
char *output;
@ -245,7 +245,7 @@ static CURLcode base64_encode(const char *table64,
*
* @unittest: 1302
*/
CURLcode curlx_base64_encode(const char *inputbuff, size_t insize,
CURLcode curlx_base64_encode(const uint8_t *inputbuff, size_t insize,
char **outptr, size_t *outlen)
{
return base64_encode(Curl_base64encdec, '=',
@ -267,7 +267,7 @@ CURLcode curlx_base64_encode(const char *inputbuff, size_t insize,
*
* @unittest: 1302
*/
CURLcode curlx_base64url_encode(const char *inputbuff, size_t insize,
CURLcode curlx_base64url_encode(const uint8_t *inputbuff, size_t insize,
char **outptr, size_t *outlen)
{
return base64_encode(base64url, 0, inputbuff, insize, outptr, outlen);

View file

@ -24,12 +24,12 @@
*
***************************************************************************/
CURLcode curlx_base64_encode(const char *inputbuff, size_t insize,
CURLcode curlx_base64_encode(const uint8_t *inputbuff, size_t insize,
char **outptr, size_t *outlen);
CURLcode curlx_base64url_encode(const char *inputbuff, size_t insize,
CURLcode curlx_base64url_encode(const uint8_t *inputbuff, size_t insize,
char **outptr, size_t *outlen);
CURLcode curlx_base64_decode(const char *src,
unsigned char **outptr, size_t *outlen);
uint8_t **outptr, size_t *outlen);
extern const char Curl_base64encdec[];

View file

@ -367,7 +367,8 @@ static CURLcode http_output_basic(struct Curl_easy *data, bool proxy)
if(!out)
return CURLE_OUT_OF_MEMORY;
result = curlx_base64_encode(out, strlen(out), &authorization, &size);
result = curlx_base64_encode((uint8_t *)out, strlen(out),
&authorization, &size);
if(result)
goto fail;

View file

@ -1847,8 +1847,7 @@ CURLcode Curl_http2_request_upgrade(struct dynbuf *req,
return CURLE_FAILED_INIT;
}
result = curlx_base64url_encode((const char *)binsettings, binlen,
&base64, &blen);
result = curlx_base64url_encode(binsettings, binlen, &base64, &blen);
if(result) {
curlx_dyn_free(req);
return result;

View file

@ -205,7 +205,7 @@ CURLcode Curl_output_ntlm(struct Curl_easy *data, bool proxy)
hostname, ntlm, &ntlmmsg);
if(!result) {
DEBUGASSERT(Curl_bufref_len(&ntlmmsg) != 0);
result = curlx_base64_encode((const char *) Curl_bufref_ptr(&ntlmmsg),
result = curlx_base64_encode(Curl_bufref_ptr(&ntlmmsg),
Curl_bufref_len(&ntlmmsg), &base64, &len);
if(!result) {
free(*allocuserpwd);
@ -224,7 +224,7 @@ CURLcode Curl_output_ntlm(struct Curl_easy *data, bool proxy)
result = Curl_auth_create_ntlm_type3_message(data, userp, passwdp,
ntlm, &ntlmmsg);
if(!result && Curl_bufref_len(&ntlmmsg)) {
result = curlx_base64_encode((const char *) Curl_bufref_ptr(&ntlmmsg),
result = curlx_base64_encode(Curl_bufref_ptr(&ntlmmsg),
Curl_bufref_len(&ntlmmsg), &base64, &len);
if(!result) {
free(*allocuserpwd);

View file

@ -626,7 +626,8 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
curl_strequal(";binary", attr + (attr_len - 7)) ) {
/* Binary attribute, encode to base64. */
if(vals[i]->bv_len) {
result = curlx_base64_encode(vals[i]->bv_val, vals[i]->bv_len,
result = curlx_base64_encode((uint8_t *)vals[i]->bv_val,
vals[i]->bv_len,
&val_b64, &val_b64_sz);
if(result) {
ldap_value_free_len(vals);

View file

@ -1213,7 +1213,8 @@ static CURLcode oldap_recv(struct Curl_easy *data, int sockindex, char *buf,
/* Binary value, encode to base64. */
if(bvals[i].bv_len)
result = curlx_base64_encode(bvals[i].bv_val, bvals[i].bv_len,
result = curlx_base64_encode((uint8_t *)bvals[i].bv_val,
bvals[i].bv_len,
&val_b64, &val_b64_sz);
if(!result)
result = client_write(data, STRCONST(": "), val_b64, val_b64_sz,

View file

@ -710,7 +710,7 @@ static CURLcode auth_create_digest_http_message(
if(result)
return result;
result = curlx_base64_encode(cnoncebuf, sizeof(cnoncebuf),
result = curlx_base64_encode((uint8_t *)cnoncebuf, sizeof(cnoncebuf),
&cnonce, &cnonce_sz);
if(result)
return result;

View file

@ -301,7 +301,7 @@ CURLcode Curl_auth_create_spnego_message(struct negotiatedata *nego,
char **outptr, size_t *outlen)
{
/* Base64 encode the already generated response */
CURLcode result = curlx_base64_encode((const char *)nego->output_token,
CURLcode result = curlx_base64_encode(nego->output_token,
nego->output_token_length, outptr,
outlen);
if(!result && (!*outptr || !*outlen)) {

View file

@ -602,7 +602,7 @@ static CURLcode ssh_check_fingerprint(struct Curl_easy *data,
/* The length of fingerprint is 32 bytes for SHA256.
* See libssh2_hostkey_hash documentation. */
if(curlx_base64_encode(fingerprint, 32, &fingerprint_b64,
if(curlx_base64_encode((const uint8_t *)fingerprint, 32, &fingerprint_b64,
&fingerprint_b64_len) != CURLE_OK) {
myssh_state(data, sshc, SSH_SESSION_FREE);
return CURLE_PEER_FAILED_VERIFICATION;

View file

@ -4132,7 +4132,7 @@ static void ossl_trace_ech_retry_configs(struct Curl_easy *data, SSL* ssl,
int rv = 1;
# ifndef HAVE_BORINGSSL_LIKE
char *inner = NULL;
unsigned char *rcs = NULL;
uint8_t *rcs = NULL;
char *outer = NULL;
# else
const char *inner = NULL;
@ -4156,7 +4156,7 @@ static void ossl_trace_ech_retry_configs(struct Curl_easy *data, SSL* ssl,
char *b64str = NULL;
size_t blen = 0;
result = curlx_base64_encode((const char *)rcs, rcl, &b64str, &blen);
result = curlx_base64_encode(rcs, rcl, &b64str, &blen);
if(!result && b64str) {
infof(data, "ECH: retry_configs %s", b64str);
free(b64str);

View file

@ -790,7 +790,7 @@ CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data,
sha256sumdigest, CURL_SHA256_DIGEST_LENGTH);
if(!encode)
encode = curlx_base64_encode((char *)sha256sumdigest,
encode = curlx_base64_encode(sha256sumdigest,
CURL_SHA256_DIGEST_LENGTH,
&cert_hash, &cert_hash_len);
Curl_safefree(sha256sumdigest);

View file

@ -1816,7 +1816,7 @@ static CURLcode wssl_handshake(struct Curl_cfilter *cf,
char *b64str = NULL;
size_t blen = 0;
result = curlx_base64_encode((const char *)echConfigs, echConfigsLen,
result = curlx_base64_encode(echConfigs, echConfigsLen,
&b64str, &blen);
if(!result && b64str)
infof(data, "ECH: (not yet) retry_configs %s", b64str);

View file

@ -1228,7 +1228,7 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data,
curlx_dyn_reset(&out);
/* Generate PEM certificate. */
result = curlx_base64_encode(cert.certificate.beg,
result = curlx_base64_encode((const uint8_t *)cert.certificate.beg,
cert.certificate.end - cert.certificate.beg,
&certptr, &clen);
if(result)

View file

@ -1276,7 +1276,7 @@ CURLcode Curl_ws_request(struct Curl_easy *data, struct dynbuf *req)
result = Curl_rand(data, rand, sizeof(rand));
if(result)
return result;
result = curlx_base64_encode((char *)rand, sizeof(rand), &randstr, &randlen);
result = curlx_base64_encode(rand, sizeof(rand), &randstr, &randlen);
if(result)
return result;
DEBUGASSERT(randlen < sizeof(keyval));

View file

@ -159,7 +159,7 @@ static CURLcode tool_ssls_exp(CURL *easy, void *userptr,
"# This file was generated by libcurl! Edit at your own risk.\n",
ctx->fp);
r = curlx_base64_encode((const char *)shmac, shmac_len, &enc, &enc_len);
r = curlx_base64_encode(shmac, shmac_len, &enc, &enc_len);
if(r)
goto out;
r = CURLE_WRITE_ERROR;
@ -168,7 +168,7 @@ static CURLcode tool_ssls_exp(CURL *easy, void *userptr,
if(EOF == fputc(':', ctx->fp))
goto out;
tool_safefree(enc);
r = curlx_base64_encode((const char *)sdata, sdata_len, &enc, &enc_len);
r = curlx_base64_encode(sdata, sdata_len, &enc, &enc_len);
if(r)
goto out;
r = CURLE_WRITE_ERROR;

View file

@ -150,7 +150,7 @@ static ParameterError varfunc(char *c, /* content */
if(clen) {
char *enc;
size_t elen;
CURLcode result = curlx_base64_encode(c, clen, &enc, &elen);
CURLcode result = curlx_base64_encode((uint8_t *)c, clen, &enc, &elen);
if(result) {
err = PARAM_NO_MEM;
break;

View file

@ -133,7 +133,7 @@ static CURLcode test_unit1302(const char *arg)
size_t dlen;
/* first encode */
rc = curlx_base64_encode(e->input, e->ilen, &out, &olen);
rc = curlx_base64_encode((const uint8_t *)e->input, e->ilen, &out, &olen);
abort_unless(rc == CURLE_OK, "return code should be CURLE_OK");
abort_unless(olen == e->olen, "wrong output size");
if(memcmp(out, e->output, e->olen)) {
@ -166,7 +166,8 @@ static CURLcode test_unit1302(const char *arg)
struct etest *e = &url[i];
char *out;
size_t olen;
rc = curlx_base64url_encode(e->input, e->ilen, &out, &olen);
rc = curlx_base64url_encode((const uint8_t *)e->input, e->ilen,
&out, &olen);
abort_unless(rc == CURLE_OK, "return code should be CURLE_OK");
if(olen != e->olen) {
curl_mfprintf(stderr, "Test %u URL encoded output length %zu "