61 lines
1.8 KiB
Diff
61 lines
1.8 KiB
Diff
|
|
From 4c3f77e871820d055a5f6c4cd7a6ac47a7f3877d Mon Sep 17 00:00:00 2001
|
||
|
|
From: Daniel Stenberg <daniel@haxx.se>
|
||
|
|
Date: Thu, 9 Jun 2022 09:27:24 +0200
|
||
|
|
Subject: [PATCH] krb5: return error properly on decode errors
|
||
|
|
|
||
|
|
---
|
||
|
|
lib/krb5.c | 18 +++++++++++-------
|
||
|
|
1 file changed, 11 insertions(+), 7 deletions(-)
|
||
|
|
|
||
|
|
Index: curl-7.81.0/lib/krb5.c
|
||
|
|
===================================================================
|
||
|
|
--- curl-7.81.0.orig/lib/krb5.c
|
||
|
|
+++ curl-7.81.0/lib/krb5.c
|
||
|
|
@@ -146,11 +146,8 @@ krb5_decode(void *app_data, void *buf, i
|
||
|
|
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);
|
||
|
|
@@ -512,6 +509,7 @@ static CURLcode read_data(struct connect
|
||
|
|
{
|
||
|
|
int len;
|
||
|
|
CURLcode result;
|
||
|
|
+ int nread;
|
||
|
|
|
||
|
|
result = socket_read(fd, &len, sizeof(len));
|
||
|
|
if(result)
|
||
|
|
@@ -520,7 +518,10 @@ static CURLcode read_data(struct connect
|
||
|
|
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;
|
||
|
|
@@ -528,8 +529,11 @@ static CURLcode read_data(struct connect
|
||
|
|
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;
|
||
|
|
}
|