curl escape and unescape integer overflows
The four libcurl functions `curl_escape()`, `curl_easy_escape()`, `curl_unescape` and `curl_easy_unescape` perform string URL percent escaping and unescaping. They accept custom string length inputs in signed integer arguments. (The functions having names without "easy" being the deprecated versions of the others.) The provided string length arguments were not properly checked and due to arithmetic in the functions, passing in the length `0xffffffff` (2^32-1 or `UINT_MAX` or even -1) would end up causing an allocation of zero bytes of heap memory that curl would attempt to write gigabytes of data into. The use of 'int' for this input type in the API is of course unwise but has remained so in order to maintain the API over the years.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2016-7167
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 1 Nov 2026, 09:35 UTC · Revision 1
Source evidence
curl escape and unescape integer overflows
core-osv · Original sourcePublished 14 Sept 2016, 08:00 UTC
The four libcurl functions `curl_escape()`, `curl_easy_escape()`, `curl_unescape` and `curl_easy_unescape` perform string URL percent escaping and unescaping. They accept custom string length inputs in signed integer arguments. (The functions having names without "easy" being the deprecated versions of the others.) The provided string length arguments were not properly checked and due to arithmetic in the functions, passing in the length `0xffffffff` (2^32-1 or `UINT_MAX` or even -1) would end up causing an allocation of zero bytes of heap memory that curl would attempt to write gigabytes of data into. The use of 'int' for this input type in the API is of course unwise but has remained so in order to maintain the API over the years.
osv:CURL-CVE-2016-7167
Complete source record
{
"id": "d975365df5a42e2fed330e2d7c812c09cff47c7cf5574936870eb63a39a6a7bf",
"url": "https://osv.dev/vulnerability/CURL-CVE-2016-7167",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "curl escape and unescape integer overflows",
"summary": "The four libcurl functions `curl_escape()`, `curl_easy_escape()`, `curl_unescape` and `curl_easy_unescape` perform string URL percent escaping and unescaping. They accept custom string length inputs in signed integer arguments. (The functions having names without \"easy\" being the deprecated versions of the others.) The provided string length arguments were not properly checked and due to arithmetic in the functions, passing in the length `0xffffffff` (2^32-1 or `UINT_MAX` or even -1) would end up causing an allocation of zero bytes of heap memory that curl would attempt to write gigabytes of data into. The use of 'int' for this input type in the API is of course unwise but has remained so in order to maintain the API over the years.",
"evidence": "osv:CURL-CVE-2016-7167",
"products": [],
"severity": "medium",
"structured": {
"id": "CURL-CVE-2016-7167",
"aliases": [
"CURL-CVE-2016-7167",
"CVE-2016-7167"
],
"affected": [
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "7.11.1"
},
{
"fixed": "7.50.3"
}
]
}
],
"versions": [
"7.50.2",
"7.50.1",
"7.50.0",
"7.49.1",
"7.49.0",
"7.48.0",
"7.47.1",
"7.47.0",
"7.46.0",
"7.45.0",
"7.44.0",
"7.43.0",
"7.42.1",
"7.42.0",
"7.41.0",
"7.40.0",
"7.39.0",
"7.38.0",
"7.37.1",
"7.37.0",
"7.36.0",
"7.35.0",
"7.34.0",
"7.33.0",
"7.32.0",
"7.31.0",
"7.30.0",
"7.29.0",
"7.28.1",
"7.28.0",
"7.27.0",
"7.26.0",
"7.25.0",
"7.24.0",
"7.23.1",
"7.23.0",
"7.22.0",
"7.21.7",
"7.21.6",
"7.21.5",
"7.21.4",
"7.21.3",
"7.21.2",
"7.21.1",
"7.21.0",
"7.20.1",
"7.20.0",
"7.19.7",
"7.19.6",
"7.19.5",
"7.19.4",
"7.19.3",
"7.19.2",
"7.19.1",
"7.19.0",
"7.18.2",
"7.18.1",
"7.18.0",
"7.17.1",
"7.17.0",
"7.16.4",
"7.16.3",
"7.16.2",
"7.16.1",
"7.16.0",
"7.15.5",
"7.15.4",
"7.15.3",
"7.15.2",
"7.15.1",
"7.15.0",
"7.14.1",
"7.14.0",
"7.13.2",
"7.13.1",
"7.13.0",
"7.12.3",
"7.12.2",
"7.12.1",
"7.12.0",
"7.11.2",
"7.11.1"
],
"database_specific": {
"source": "https://curl.se/docs/CURL-CVE-2016-7167.json"
}
}
],
"modified": "2026-10-24T23:17:46Z",
"provider": "osv",
"references": [],
"provider_metadata": {
"CWE": {
"id": "CWE-131",
"desc": "Incorrect Calculation of Buffer Size"
},
"URL": "https://curl.se/docs/CVE-2016-7167.json",
"www": "https://curl.se/docs/CVE-2016-7167.html",
"affects": "lib",
"package": "curl",
"severity": "Medium",
"last_affected": "7.50.2"
}
},
"related_cves": [
{
"value": "CVE-2016-7167",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/database_specific/severity"
},
"source_id": "core-osv",
"document_id": 444202,
"published_at": "2016-09-14T08:00:00+00:00"
}