} else if (bodylen == BODY_CHUNKED) {
/* ... else, chunked */
while ((i = vpninfo->ssl_gets(vpninfo, buf, sizeof(buf)))) {
- int chunklen, lastchunk = 0;
+ int lastchunk = 0;
+ long chunklen;
if (i < 0) {
vpn_progress(vpninfo, PRG_ERR,
lastchunk = 1;
goto skip;
}
+ if (chunklen < 0) {
+ vpn_progress(vpninfo, PRG_ERR,
+ _("HTTP chunk length is negative (%ld)\n"), chunklen);
+ openconnect_close_https(vpninfo, 0);
+ return -EINVAL;
+ }
+ if (chunklen >= INT_MAX) {
+ vpn_progress(vpninfo, PRG_ERR,
+ _("HTTP chunk length is too large (%ld)\n"), chunklen);
+ openconnect_close_https(vpninfo, 0);
+ return -EINVAL;
+ }
if (buf_ensure_space(body, chunklen + 1)) {
openconnect_close_https(vpninfo, 0);
return buf_error(body);
<li><b>OpenConnect HEAD</b>
<ul>
<li>Fix GlobalProtect ESP stall (<a href="https://gitlab.com/openconnect/openconnect/merge_requests/55">#55</a>).</li>
+ <li>Fix HTTP chunked encoding buffer overflow (CVE-2019-16239).</li>
</ul><br/>
</li>
<li><b><a href="ftp://ftp.infradead.org/pub/openconnect/openconnect-8.04.tar.gz">OpenConnect v8.04</a></b>