mirror of
https://github.com/curl/curl.git
synced 2026-05-17 00:06:20 +03:00
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:
parent
fd5a117a67
commit
bbb929112b
19 changed files with 33 additions and 30 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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[];
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
2
lib/ws.c
2
lib/ws.c
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 "
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue