JavaCV: Integer Overflow in IPCameraFrameGrabber Causes Infinite-Loop DoS
### Summary `IPCameraFrameGrabber` parses the `Content-Length` value from the multipart MJPEG HTTP stream returned by the configured IP camera without any bounds checking. A malicious or compromised camera endpoint - or any network attacker able to tamper with the plaintext HTTP response (these streams are conventionally accessed over `http://`, as documented in the class itself) - can supply a `Content-Length` value in the range `1073741825`-`2147483647`. This drives the internal buffer-growth routine `ensureBufferCapacity(int)` into 32-bit signed integer overflow, which turns the "grow the buffer" loop into a true infinite loop: the loop variable oscillates to `0` and never again satisfies the loop's exit condition. The thread that called `grab()`/`grabBufferedImage()` spins at 100% CPU forever and never returns, permanently hanging the calling application's frame-grabbing thread with no exception, timeout, or interrupt path available to the caller. ### Details File: `src/main/java/org/bytedeco/javacv/IPCameraFrameGrabber.java` ```java private byte[] readImage() throws IOException { ... int c0 = subheader.indexOf("content-length: "); final int c1 = subheader.indexOf('\r', c0); if (c0 < 0) { throw new EOFException("The camera stream ended unexpectedly"); } c0 += 16; final int contentLength = Integer.parseInt(subheader.substring(c0, c1).trim()); // <-- fully attacker-controlled // adaptive size - careful - don't want a 2G jpeg ensureBufferCapacity(contentLength); // <-- no up
- Products
- org.bytedeco:javacv
- Affected versions
- 0.10, 0.11, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.3.1, 1.3.2, 1.3.3, 1.4, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5, 1.5.1, 1.5.10, 1.5.11, 1.5.12, 1.5.13, 1.5.2, 1.5.3, 1.5.4, 1.5.5, 1.5.6, 1.5.7, 1.5.8, 1.5.9
- Fixed versions
- 1.5.14
- CVEs
- CVE-2026-102834
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 30 Oct 2026, 22:38 UTC · Revision 1
Source evidence
JavaCV: Integer Overflow in IPCameraFrameGrabber Causes Infinite-Loop DoS
core-osv · Original sourcePublished 16 Oct 2026, 19:53 UTC
### Summary `IPCameraFrameGrabber` parses the `Content-Length` value from the multipart MJPEG HTTP stream returned by the configured IP camera without any bounds checking. A malicious or compromised camera endpoint - or any network attacker able to tamper with the plaintext HTTP response (these streams are conventionally accessed over `http://`, as documented in the class itself) - can supply a `Content-Length` value in the range `1073741825`-`2147483647`. This drives the internal buffer-growth routine `ensureBufferCapacity(int)` into 32-bit signed integer overflow, which turns the "grow the buffer" loop into a true infinite loop: the loop variable oscillates to `0` and never again satisfies the loop's exit condition. The thread that called `grab()`/`grabBufferedImage()` spins at 100% CPU forever and never returns, permanently hanging the calling application's frame-grabbing thread with no exception, timeout, or interrupt path available to the caller. ### Details File: `src/main/java/org/bytedeco/javacv/IPCameraFrameGrabber.java` ```java private byte[] readImage() throws IOException { ... int c0 = subheader.indexOf("content-length: "); final int c1 = subheader.indexOf('\r', c0); if (c0 < 0) { throw new EOFException("The camera stream ended unexpectedly"); } c0 += 16; final int contentLength = Integer.parseInt(subheader.substring(c0, c1).trim()); // <-- fully attacker-controlled // adaptive size - careful - don't want a 2G jpeg ensureBufferCapacity(contentLength); // <-- no up
osv:GHSA-rxjv-24xq-76wc
org.bytedeco:javacv
Fixed versions: 1.5.14
Complete source record
{
"id": "da0c98da1be7420b17af3dc63a95a94b33594c7de0f9f1b5b1f483c8ce8383e0",
"url": "https://osv.dev/vulnerability/GHSA-rxjv-24xq-76wc",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "JavaCV: Integer Overflow in IPCameraFrameGrabber Causes Infinite-Loop DoS",
"summary": "### Summary `IPCameraFrameGrabber` parses the `Content-Length` value from the multipart MJPEG HTTP stream returned by the configured IP camera without any bounds checking. A malicious or compromised camera endpoint - or any network attacker able to tamper with the plaintext HTTP response (these streams are conventionally accessed over `http://`, as documented in the class itself) - can supply a `Content-Length` value in the range `1073741825`-`2147483647`. This drives the internal buffer-growth routine `ensureBufferCapacity(int)` into 32-bit signed integer overflow, which turns the \"grow the buffer\" loop into a true infinite loop: the loop variable oscillates to `0` and never again satisfies the loop's exit condition. The thread that called `grab()`/`grabBufferedImage()` spins at 100% CPU forever and never returns, permanently hanging the calling application's frame-grabbing thread with no exception, timeout, or interrupt path available to the caller. ### Details File: `src/main/java/org/bytedeco/javacv/IPCameraFrameGrabber.java` ```java private byte[] readImage() throws IOException { ... int c0 = subheader.indexOf(\"content-length: \"); final int c1 = subheader.indexOf('\\r', c0); if (c0 < 0) { throw new EOFException(\"The camera stream ended unexpectedly\"); } c0 += 16; final int contentLength = Integer.parseInt(subheader.substring(c0, c1).trim()); // <-- fully attacker-controlled // adaptive size - careful - don't want a 2G jpeg ensureBufferCapacity(contentLength); // <-- no up",
"evidence": "osv:GHSA-rxjv-24xq-76wc",
"products": [
{
"name": {
"value": "org.bytedeco:javacv",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "1.5.14",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": [
{
"value": "0.10",
"evidence": "/affected/0/versions"
},
{
"value": "0.11",
"evidence": "/affected/0/versions"
},
{
"value": "0.8",
"evidence": "/affected/0/versions"
},
{
"value": "0.9",
"evidence": "/affected/0/versions"
},
{
"value": "1.0",
"evidence": "/affected/0/versions"
},
{
"value": "1.1",
"evidence": "/affected/0/versions"
},
{
"value": "1.2",
"evidence": "/affected/0/versions"
},
{
"value": "1.3",
"evidence": "/affected/0/versions"
},
{
"value": "1.3.1",
"evidence": "/affected/0/versions"
},
{
"value": "1.3.2",
"evidence": "/affected/0/versions"
},
{
"value": "1.3.3",
"evidence": "/affected/0/versions"
},
{
"value": "1.4",
"evidence": "/affected/0/versions"
},
{
"value": "1.4.1",
"evidence": "/affected/0/versions"
},
{
"value": "1.4.2",
"evidence": "/affected/0/versions"
},
{
"value": "1.4.3",
"evidence": "/affected/0/versions"
},
{
"value": "1.4.4",
"evidence": "/affected/0/versions"
},
{
"value": "1.5",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.1",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.10",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.11",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.12",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.13",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.2",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.3",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.4",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.5",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.6",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.7",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.8",
"evidence": "/affected/0/versions"
},
{
"value": "1.5.9",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "high",
"structured": {
"id": "GHSA-rxjv-24xq-76wc",
"aliases": [
"CVE-2026-102834",
"GHSA-rxjv-24xq-76wc"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
}
],
"affected": [
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "1.5.14"
}
]
}
],
"package": {
"name": "org.bytedeco:javacv",
"purl": "pkg:maven/org.bytedeco/javacv",
"ecosystem": "Maven"
},
"versions": [
"0.10",
"0.11",
"0.8",
"0.9",
"1.0",
"1.1",
"1.2",
"1.3",
"1.3.1",
"1.3.2",
"1.3.3",
"1.4",
"1.4.1",
"1.4.2",
"1.4.3",
"1.4.4",
"1.5",
"1.5.1",
"1.5.10",
"1.5.11",
"1.5.12",
"1.5.13",
"1.5.2",
"1.5.3",
"1.5.4",
"1.5.5",
"1.5.6",
"1.5.7",
"1.5.8",
"1.5.9"
],
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-rxjv-24xq-76wc/GHSA-rxjv-24xq-76wc.json"
}
}
],
"modified": "2026-10-16T20:00:04.169076372Z",
"provider": "osv",
"references": [
"https://github.com/bytedeco/javacv/security/advisories/GHSA-rxjv-24xq-76wc",
"https://github.com/bytedeco/javacv/commit/cd1977800b827beadf3c53c4032e57172845e0b4",
"https://github.com/bytedeco/javacv",
"https://github.com/bytedeco/javacv/releases/tag/1.5.14"
],
"provider_metadata": {
"cwe_ids": [
"CWE-190"
],
"severity": "HIGH",
"github_reviewed": true,
"nvd_published_at": null,
"github_reviewed_at": "2026-10-16T19:53:06Z"
}
},
"related_cves": [
{
"value": "CVE-2026-102834",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/database_specific/severity"
},
"source_id": "core-osv",
"document_id": 347717,
"published_at": "2026-10-16T19:53:06+00:00"
}