From acc40fdaf7bb09aafc912a687ca6ed063ecaface Mon Sep 17 00:00:00 2001
From: 0xmrma <moabdelaal442004@gmail.com>
Date: Sun, 1 Mar 2026 09:18:21 +0200
Subject: [PATCH] der: reject truncated lengths in octet/implicit/constructed

---
 src/ecdsa/der.py | 6 ++++++
 1 file changed, 6 insertions(+)

Index: ecdsa-0.18.0/src/ecdsa/der.py
===================================================================
--- ecdsa-0.18.0.orig/src/ecdsa/der.py
+++ ecdsa-0.18.0/src/ecdsa/der.py
@@ -137,6 +137,8 @@ def remove_constructed(string):
         )
     tag = s0 & 0x1F
     length, llen = read_length(string[1:])
+    if length > len(string) - 1 - llen:
+        raise UnexpectedDER("Length longer than the provided buffer")
     body = string[1 + llen : 1 + llen + length]
     rest = string[1 + llen + length :]
     return tag, body, rest
@@ -160,6 +162,8 @@ def remove_octet_string(string):
         n = str_idx_as_int(string, 0)
         raise UnexpectedDER("wanted type 'octetstring' (0x04), got 0x%02x" % n)
     length, llen = read_length(string[1:])
+    if length > len(string) - 1 - llen:
+        raise UnexpectedDER("Length longer than the provided buffer")
     body = string[1 + llen : 1 + llen + length]
     rest = string[1 + llen + length :]
     return body, rest
