From d72b0cd2a76ee5c095553e4cf43fe1ef5f7a3f8d Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on Debian Linux)" <rob@synchro.net>
Date: Tue, 22 Oct 2024 22:01:54 -0700
Subject: [PATCH] Add contains_invalid_attr() - checks string for invalid attr
 Ctrl-A codes

Other Ctrl-A codes (e.g. ^A\) might be valid, but they're not attribute
control codes, so their existence would cause this function to return true.
---
 src/sbbs3/str_util.c | 18 ++++++++++++++++++
 src/sbbs3/str_util.h |  1 +
 2 files changed, 19 insertions(+)

diff --git a/src/sbbs3/str_util.c b/src/sbbs3/str_util.c
index 64abb5b128..8fc66853f0 100644
--- a/src/sbbs3/str_util.c
+++ b/src/sbbs3/str_util.c
@@ -534,6 +534,24 @@ size_t strip_invalid_attr(char *str)
 	return(a);
 }
 
+/****************************************************************************/
+/* Detects invalid Ctrl-Ax "attribute" sequences in str                    	*/
+/* Returns number of ^A's in line                                           */
+/****************************************************************************/
+bool contains_invalid_attr(const char *str)
+{
+
+	while(*str != '\0') {
+		if(*str == CTRL_A) {
+			++str;
+			if(!valid_ctrl_a_attr(*str))
+				return true;
+		}
+		++str;
+	}
+	return false;
+}
+
 /****************************************************************************/
 /****************************************************************************/
 char exascii_to_ascii_char(uchar ch)
diff --git a/src/sbbs3/str_util.h b/src/sbbs3/str_util.h
index 12af547ff0..2864f809dc 100644
--- a/src/sbbs3/str_util.h
+++ b/src/sbbs3/str_util.h
@@ -57,6 +57,7 @@ DLLEXPORT char *	strip_char(const char* str, char* dest, char);
 DLLEXPORT bool		valid_ctrl_a_attr(char a);
 DLLEXPORT bool		valid_ctrl_a_code(char a);
 DLLEXPORT size_t	strip_invalid_attr(char *str);
+DLLEXPORT bool		contains_invalid_attr(const char*);
 DLLEXPORT char *	u32toac(uint32_t, char*, char sep);
 DLLEXPORT char *	u64toac(uint64_t, char*, char sep);
 DLLEXPORT char *	rot13(char* str);
-- 
GitLab