mirror of
https://github.com/curl/curl.git
synced 2026-05-30 07:37:33 +03:00
krb5: return error properly on decode errors
Bug: https://curl.se/docs/CVE-2022-32208.html CVE-2022-32208 Reported-by: Harry Sintonen Closes #9051
This commit is contained in:
parent
2b67a0a112
commit
6ecdf5136b
1 changed files with 11 additions and 7 deletions
18
lib/krb5.c
18
lib/krb5.c
|
|
@ -142,11 +142,8 @@ krb5_decode(void *app_data, void *buf, int len,
|
|||
enc.value = buf;
|
||||
enc.length = len;
|
||||
maj = gss_unwrap(&min, *context, &enc, &dec, NULL, NULL);
|
||||
if(maj != GSS_S_COMPLETE) {
|
||||
if(len >= 4)
|
||||
strcpy(buf, "599 ");
|
||||
if(maj != GSS_S_COMPLETE)
|
||||
return -1;
|
||||
}
|
||||
|
||||
memcpy(buf, dec.value, dec.length);
|
||||
len = curlx_uztosi(dec.length);
|
||||
|
|
@ -508,6 +505,7 @@ static CURLcode read_data(struct connectdata *conn,
|
|||
{
|
||||
int len;
|
||||
CURLcode result;
|
||||
int nread;
|
||||
|
||||
result = socket_read(fd, &len, sizeof(len));
|
||||
if(result)
|
||||
|
|
@ -516,7 +514,10 @@ static CURLcode read_data(struct connectdata *conn,
|
|||
if(len) {
|
||||
/* only realloc if there was a length */
|
||||
len = ntohl(len);
|
||||
buf->data = Curl_saferealloc(buf->data, len);
|
||||
if(len > CURL_MAX_INPUT_LENGTH)
|
||||
len = 0;
|
||||
else
|
||||
buf->data = Curl_saferealloc(buf->data, len);
|
||||
}
|
||||
if(!len || !buf->data)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
|
@ -524,8 +525,11 @@ static CURLcode read_data(struct connectdata *conn,
|
|||
result = socket_read(fd, buf->data, len);
|
||||
if(result)
|
||||
return result;
|
||||
buf->size = conn->mech->decode(conn->app_data, buf->data, len,
|
||||
conn->data_prot, conn);
|
||||
nread = conn->mech->decode(conn->app_data, buf->data, len,
|
||||
conn->data_prot, conn);
|
||||
if(nread < 0)
|
||||
return CURLE_RECV_ERROR;
|
||||
buf->size = (size_t)nread;
|
||||
buf->index = 0;
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue