File fix-buffer-overflow-2c7797.patch of Package capstone.42054

From ed4c30c3385c4071737831f1b61788add040f4dc Mon Sep 17 00:00:00 2001
From: Rot127 <45763064+Rot127@users.noreply.github.com>
Date: Wed, 17 Dec 2025 14:01:10 +0000
Subject: [PATCH] Merge commit from fork

* Check return value of cs_vsnprintf for negative values.

This prevents underflow of SStream.index.
This bug was reported by Github user Finder16.

* Add overflow check before adding cs_vsnprintf return value.

[DF: Removed the test related hunks;]

(cherry picked from commit 2c7797182a1618be12017d7d41e0b6581d5d529e)

* Introduce the macro SSTREAM_OVERFLOW_CHECK

(cherry picked from commit af1ed2fb3d9d67926389a71e12531bef76f50482)

References: bsc#1255310 (CVE-2025-68114)
Signed-off-by: Dario Faggioli <dfaggioli@suse.com>
---
 SStream.c |  4 ++++
 SStream.h | 12 +++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/SStream.c b/SStream.c
index 5ae237fd..a4224835 100644
--- a/SStream.c
+++ b/SStream.c
@@ -48,6 +48,10 @@ void SStream_concat(SStream *ss, const char *fmt, ...)
 	va_start(ap, fmt);
 	ret = cs_vsnprintf(ss->buffer + ss->index, sizeof(ss->buffer) - (ss->index + 1), fmt, ap);
 	va_end(ap);
+	if (ret < 0) {
+		return;
+	}
+	SSTREAM_OVERFLOW_CHECK(ss, ret);
 	ss->index += ret;
 #endif
 }
diff --git a/SStream.h b/SStream.h
index 3473085d..1869978d 100644
--- a/SStream.h
+++ b/SStream.h
@@ -6,11 +6,21 @@
 
 #include "include/capstone/platform.h"
 
+#define SSTREAM_BUF_LEN 512
+
 typedef struct SStream {
-	char buffer[512];
+	char buffer[SSTREAM_BUF_LEN];
 	int index;
 } SStream;
 
+#define SSTREAM_OVERFLOW_CHECK(OS, len) \
+do { \
+	if (OS->index + len + 1 > SSTREAM_BUF_LEN) { \
+		fprintf(stderr, "Buffer overflow caught!\n"); \
+		return; \
+	} \
+} while(0)
+
 void SStream_Init(SStream *ss);
 
 void SStream_concat(SStream *ss, const char *fmt, ...);
-- 
2.52.0

openSUSE Build Service is sponsored by