File gnu-efi-fix-strncpy-stpncpy-strncat.patch of Package gnu-efi

From 85f1c797f6935223205159dd108e4871b2e55500 Mon Sep 17 00:00:00 2001
From: Pete Batard <pete@akeo.ie>
Date: Tue, 24 Apr 2018 13:45:11 +0100
Subject: [PATCH 1/4] Fix conversion from 'UINTN' to 'UINT8' warnings

* MSVC generates two of the following in rtstr.c:
  warning C4244: 'function': conversion from 'UINTN' to 'UINT8', possible loss of data
---
 lib/runtime/rtstr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/runtime/rtstr.c b/lib/runtime/rtstr.c
index 80ff489..dcc1a2a 100644
--- a/lib/runtime/rtstr.c
+++ b/lib/runtime/rtstr.c
@@ -71,7 +71,7 @@ RtStrnCpy (
 {
     UINTN Size = RtStrnLen(Src, Len);
     if (Size != Len)
-	RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16));
+    RtSetMem(Dest + Len, '\0', (UINT8)((Len - Size) * sizeof(CHAR16)));
     RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
 }
 
@@ -107,7 +107,7 @@ RtStpnCpy (
 {
     UINTN Size = RtStrnLen(Src, Len);
     if (Size != Len)
-	RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16));
+    RtSetMem(Dest + Len, '\0', (UINT8)((Len - Size) * sizeof(CHAR16)));
     RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
     return Dest + Size;
 }
-- 
2.19.0


From 4889dc561f905406f3d0a648321589bd47703fdc Mon Sep 17 00:00:00 2001
From: Gary Lin <glin@suse.com>
Date: Tue, 9 Oct 2018 18:35:21 +0800
Subject: [PATCH 2/4] Set '\0' properly in StrnCpy()

The arguments to SetMem() were wrong. Besides, SetMem() should start at
"Dest + Size" since "Size" will be smaller than "Len" if they are not
equal.

Signed-off-by: Gary Lin <glin@suse.com>
---
 lib/runtime/rtstr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/runtime/rtstr.c b/lib/runtime/rtstr.c
index dcc1a2a..949f938 100644
--- a/lib/runtime/rtstr.c
+++ b/lib/runtime/rtstr.c
@@ -71,7 +71,7 @@ RtStrnCpy (
 {
     UINTN Size = RtStrnLen(Src, Len);
     if (Size != Len)
-    RtSetMem(Dest + Len, '\0', (UINT8)((Len - Size) * sizeof(CHAR16)));
+        RtSetMem(Dest + Size, (Len - Size) * sizeof(CHAR16), '\0');
     RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
 }
 
-- 
2.19.0


From 38a9921bc39fea25b0ca62d6eb1595bf15d05839 Mon Sep 17 00:00:00 2001
From: Gary Lin <glin@suse.com>
Date: Thu, 11 Oct 2018 12:02:27 +0800
Subject: [PATCH 3/4] Implement StrnCat() without StrnCpy()

StrnCpy() doesn't guarantee the dest string will be null-terminated, so
we shouldn't use StrnCpy().

Signed-off-by: Gary Lin <glin@suse.com>
---
 lib/runtime/rtstr.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/lib/runtime/rtstr.c b/lib/runtime/rtstr.c
index 949f938..fe65d96 100644
--- a/lib/runtime/rtstr.c
+++ b/lib/runtime/rtstr.c
@@ -126,7 +126,7 @@ RtStrCat (
 }
 
 #ifndef __GNUC__
-#pragma RUNTIME_CODE(RtStrCat)
+#pragma RUNTIME_CODE(RtStrnCat)
 #endif
 VOID
 RUNTIMEFUNCTION
@@ -136,7 +136,12 @@ RtStrnCat (
     IN UINTN    Len
     )
 {
-    RtStrnCpy(Dest+StrLen(Dest), Src, Len);
+    UINTN DestSize, Size;
+
+    DestSize = StrLen(Dest);
+    Size = RtStrnLen(Src, Len);
+    RtCopyMem(Dest + DestSize, Src, Size * sizeof(CHAR16));
+    Dest[DestSize + Size] = '\0';
 }
 
 #ifndef __GNUC__
-- 
2.19.0


From 134587ea094a4974e5773bf228f6436535f50f1a Mon Sep 17 00:00:00 2001
From: Gary Lin <glin@suse.com>
Date: Thu, 11 Oct 2018 16:10:26 +0800
Subject: [PATCH 4/4] Set '\0' properly in StpnCpy()

The arguments to SetMem() were wrong. Besides, SetMem() should start at
"Dest + Size" since "Size" will be smaller than "Len" if they are not
equal.

Signed-off-by: Gary Lin <glin@suse.com>
---
 lib/runtime/rtstr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/runtime/rtstr.c b/lib/runtime/rtstr.c
index fe65d96..73965ca 100644
--- a/lib/runtime/rtstr.c
+++ b/lib/runtime/rtstr.c
@@ -94,7 +94,7 @@ RtStpCpy (
 }
 
 #ifndef __GNUC__
-#pragma RUNTIME_CODE(RtStrnCpy)
+#pragma RUNTIME_CODE(RtStpnCpy)
 #endif
 CHAR16 *
 RUNTIMEFUNCTION
@@ -107,7 +107,7 @@ RtStpnCpy (
 {
     UINTN Size = RtStrnLen(Src, Len);
     if (Size != Len)
-    RtSetMem(Dest + Len, '\0', (UINT8)((Len - Size) * sizeof(CHAR16)));
+        RtSetMem(Dest + Size, (Len - Size) * sizeof(CHAR16), '\0');
     RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
     return Dest + Size;
 }
-- 
2.19.0

openSUSE Build Service is sponsored by