free data on write error back on the tcp socket cid#123, make sure we dont write more data back then we got
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24105 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -720,16 +720,20 @@ handle_http_tcp (krb5_context context,
|
|||||||
"Content-type: application/octet-stream\r\n"
|
"Content-type: application/octet-stream\r\n"
|
||||||
"Content-transfer-encoding: binary\r\n\r\n";
|
"Content-transfer-encoding: binary\r\n\r\n";
|
||||||
if (write(d->s, proto, strlen(proto)) < 0) {
|
if (write(d->s, proto, strlen(proto)) < 0) {
|
||||||
|
free(data);
|
||||||
kdc_log(context, config, 0, "HTTP write failed: %s: %s",
|
kdc_log(context, config, 0, "HTTP write failed: %s: %s",
|
||||||
d->addr_string, strerror(errno));
|
d->addr_string, strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (write(d->s, msg, strlen(msg)) < 0) {
|
if (write(d->s, msg, strlen(msg)) < 0) {
|
||||||
|
free(data);
|
||||||
kdc_log(context, config, 0, "HTTP write failed: %s: %s",
|
kdc_log(context, config, 0, "HTTP write failed: %s: %s",
|
||||||
d->addr_string, strerror(errno));
|
d->addr_string, strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (len > d->len)
|
||||||
|
len = d->len;
|
||||||
memcpy(d->buf, data, len);
|
memcpy(d->buf, data, len);
|
||||||
d->len = len;
|
d->len = len;
|
||||||
free(data);
|
free(data);
|
||||||
@@ -779,6 +783,10 @@ handle_tcp(krb5_context context,
|
|||||||
strncmp((char *)d[idx].buf, "GET ", 4) == 0 &&
|
strncmp((char *)d[idx].buf, "GET ", 4) == 0 &&
|
||||||
strncmp((char *)d[idx].buf + d[idx].len - 4,
|
strncmp((char *)d[idx].buf + d[idx].len - 4,
|
||||||
"\r\n\r\n", 4) == 0) {
|
"\r\n\r\n", 4) == 0) {
|
||||||
|
|
||||||
|
/* remove the trailing \r\n\r\n so the string is NUL terminated */
|
||||||
|
d[idx].buf[d[idx].len - 4] = '\0';
|
||||||
|
|
||||||
ret = handle_http_tcp (context, config, &d[idx]);
|
ret = handle_http_tcp (context, config, &d[idx]);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
clear_descr (d + idx);
|
clear_descr (d + idx);
|
||||||
|
Reference in New Issue
Block a user