Remove _asn1_strcat() and replace strcat() with the bound-checked
_asn1_str_cat() except the one inside _asn1_str_cat(). That strcat
is replaced with strcpy.

Signed-off-by: Daniel Axtens <d...@axtens.net>
Signed-off-by: Gary Lin <g...@suse.com>
---
 ...asn1-use-bound-checked-_asn1_str_cat.patch | 85 +++++++++++++++++++
 1 file changed, 85 insertions(+)
 create mode 100644 
grub-core/lib/libtasn1-patches/0002-libtasn1-use-bound-checked-_asn1_str_cat.patch

diff --git 
a/grub-core/lib/libtasn1-patches/0002-libtasn1-use-bound-checked-_asn1_str_cat.patch
 
b/grub-core/lib/libtasn1-patches/0002-libtasn1-use-bound-checked-_asn1_str_cat.patch
new file mode 100644
index 000000000..87bb13e06
--- /dev/null
+++ 
b/grub-core/lib/libtasn1-patches/0002-libtasn1-use-bound-checked-_asn1_str_cat.patch
@@ -0,0 +1,85 @@
+From d87d8e78371e3afbdd876193295ab9e3f60c140b Mon Sep 17 00:00:00 2001
+From: Gary Lin <g...@suse.com>
+Date: Tue, 25 Jun 2024 16:27:57 +0800
+Subject: [PATCH 2/6] libtasn1: use bound-checked _asn1_str_cat()
+
+Remove _asn1_strcat() and replace strcat() with the bound-checked
+_asn1_str_cat() except the one inside _asn1_str_cat(). That strcat
+is replaced with strcpy.
+
+Signed-off-by: Daniel Axtens <d...@axtens.net>
+Signed-off-by: Gary Lin <g...@suse.com>
+---
+ grub-core/lib/libtasn1-grub/lib/decoding.c | 8 ++++----
+ grub-core/lib/libtasn1-grub/lib/element.c  | 2 +-
+ grub-core/lib/libtasn1-grub/lib/gstr.c     | 2 +-
+ grub-core/lib/libtasn1-grub/lib/int.h      | 1 -
+ 4 files changed, 6 insertions(+), 7 deletions(-)
+
+diff --git a/grub-core/lib/libtasn1-grub/lib/decoding.c 
b/grub-core/lib/libtasn1-grub/lib/decoding.c
+index bf9cb13ac..51859fe36 100644
+--- a/grub-core/lib/libtasn1-grub/lib/decoding.c
++++ b/grub-core/lib/libtasn1-grub/lib/decoding.c
+@@ -2016,8 +2016,8 @@ asn1_expand_octet_string (asn1_node_const definitions, 
asn1_node * element,
+         (p2->type & CONST_ASSIGN))
+       {
+         strcpy (name, definitions->name);
+-        strcat (name, ".");
+-        strcat (name, p2->name);
++        _asn1_str_cat (name, sizeof (name), ".");
++        _asn1_str_cat (name, sizeof (name), p2->name);
+ 
+         len = sizeof (value);
+         result = asn1_read_value (definitions, name, value, &len);
+@@ -2034,8 +2034,8 @@ asn1_expand_octet_string (asn1_node_const definitions, 
asn1_node * element,
+             if (p2)
+               {
+                 strcpy (name, definitions->name);
+-                strcat (name, ".");
+-                strcat (name, p2->name);
++                _asn1_str_cat (name, sizeof (name), ".");
++                _asn1_str_cat (name, sizeof (name), p2->name);
+ 
+                 result = asn1_create_element (definitions, name, &aux);
+                 if (result == ASN1_SUCCESS)
+diff --git a/grub-core/lib/libtasn1-grub/lib/element.c 
b/grub-core/lib/libtasn1-grub/lib/element.c
+index bc4c3c8d7..8694fecb9 100644
+--- a/grub-core/lib/libtasn1-grub/lib/element.c
++++ b/grub-core/lib/libtasn1-grub/lib/element.c
+@@ -688,7 +688,7 @@ asn1_write_value (asn1_node node_root, const char *name,
+                 return ASN1_MEM_ERROR; \
+         } else { \
+                 /* this strcat is checked */ \
+-                if (ptr) _asn1_strcat (ptr, data); \
++                if (ptr) _asn1_str_cat ((char *)ptr, ptr_size, (const char 
*)data); \
+         }
+ 
+ /**
+diff --git a/grub-core/lib/libtasn1-grub/lib/gstr.c 
b/grub-core/lib/libtasn1-grub/lib/gstr.c
+index eef419554..a9c16f5d3 100644
+--- a/grub-core/lib/libtasn1-grub/lib/gstr.c
++++ b/grub-core/lib/libtasn1-grub/lib/gstr.c
+@@ -36,7 +36,7 @@ _asn1_str_cat (char *dest, size_t dest_tot_size, const char 
*src)
+ 
+   if (dest_tot_size - dest_size > str_size)
+     {
+-      strcat (dest, src);
++      strcpy (dest + dest_size, src);
+     }
+   else
+     {
+diff --git a/grub-core/lib/libtasn1-grub/lib/int.h 
b/grub-core/lib/libtasn1-grub/lib/int.h
+index d94d51c8c..cadd80df6 100644
+--- a/grub-core/lib/libtasn1-grub/lib/int.h
++++ b/grub-core/lib/libtasn1-grub/lib/int.h
+@@ -115,7 +115,6 @@ extern const tag_and_class_st _asn1_tags[];
+ # define _asn1_strtoul(n,e,b) strtoul((const char *) n, e, b)
+ # define _asn1_strcmp(a,b) strcmp((const char *)a, (const char *)b)
+ # define _asn1_strcpy(a,b) strcpy((char *)a, (const char *)b)
+-# define _asn1_strcat(a,b) strcat((char *)a, (const char *)b)
+ 
+ # if SIZEOF_UNSIGNED_LONG_INT == 8
+ #  define _asn1_strtou64(n,e,b) strtoul((const char *) n, e, b)
+-- 
+2.35.3
+
-- 
2.35.3


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to