Skip to content
Heist/ feed
Back to feed
HighFix available

JavaCV: Integer Overflow in IPCameraFrameGrabber Causes Infinite-Loop DoS

Type: advisorySources: OSV

### 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 source

Published 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"
}