commit:     020a3783272ae302333d167a3ce37dc4bdfcffec
Author:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
AuthorDate: Mon Jul  5 12:19:53 2021 +0000
Commit:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
CommitDate: Mon Jul  5 12:20:24 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=020a3783

sys-apps/gptfdisk: Added a patch to remove byteswap

Closes: https://bugs.gentoo.org/797412
Signed-off-by: Lars Wendler <polynomial-c <AT> gentoo.org>

 .../files/gptfdisk-1.0.7-remove_byteswap.patch     | 50 ++++++++++++++++++++++
 sys-apps/gptfdisk/gptfdisk-1.0.7.ebuild            |  4 ++
 2 files changed, 54 insertions(+)

diff --git a/sys-apps/gptfdisk/files/gptfdisk-1.0.7-remove_byteswap.patch 
b/sys-apps/gptfdisk/files/gptfdisk-1.0.7-remove_byteswap.patch
new file mode 100644
index 00000000000..c1874d6edd7
--- /dev/null
+++ b/sys-apps/gptfdisk/files/gptfdisk-1.0.7-remove_byteswap.patch
@@ -0,0 +1,50 @@
+From fded770b55fdb3a201ad515d785c17ac35705652 Mon Sep 17 00:00:00 2001
+From: Erik Larsson <catacom...@gmail.com>
+Date: Tue, 8 Jun 2021 16:11:21 +0300
+Subject: [PATCH] gptpart.cc: Remove byteswap commands in
+ GPTPart::SetName(const string&).
+
+The byteswapping done in GPTPart::SetName(const string&) was reversed
+later when GPTPart::ReversePartBytes() was called.
+
+The intended design seems to have been to keep the fields in native
+endianness until just before the partition is written to disk when all
+the GPTPart data is byteswapped all at once with a call to
+GPTPart::ReversePartBytes().
+However this was defeated by leaving the original byteswaps in there and
+effectively the name was swapped back to the native-endian form. For big
+endian systems this meant that a UTF-16BE string was written to disk,
+violating the specification and causing interoperability problems.
+
+Fixed by removing these inline byteswaps in GPTPart::SetName(const
+string&).
+---
+ gptpart.cc | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/gptpart.cc b/gptpart.cc
+index 81bbcf0..841140a 100644
+--- a/gptpart.cc
++++ b/gptpart.cc
+@@ -242,7 +242,6 @@ void GPTPart::SetName(const string & theName) {
+       // then to utf16le
+       if ( uni < 0x10000 ) {
+          name[ pos ] = (uint16_t) uni ;
+-         if ( ! IsLittleEndian() ) ReverseBytes( name + pos , 2 ) ;
+          pos ++ ;
+       } // if
+       else {
+@@ -252,10 +251,8 @@ void GPTPart::SetName(const string & theName) {
+          } // if
+          uni -= 0x10000 ;
+          name[ pos ] = (uint16_t)( uni >> 10 ) | 0xd800 ;
+-         if ( ! IsLittleEndian() ) ReverseBytes( name + pos , 2 ) ;
+          pos ++ ;
+          name[ pos ] = (uint16_t)( uni & 0x3ff ) | 0xdc00 ;
+-         if ( ! IsLittleEndian() ) ReverseBytes( name + pos , 2 ) ;
+          pos ++ ;
+       }
+    } // for
+-- 
+2.32.0
+

diff --git a/sys-apps/gptfdisk/gptfdisk-1.0.7.ebuild 
b/sys-apps/gptfdisk/gptfdisk-1.0.7.ebuild
index 9093cf2c58d..d34745b703b 100644
--- a/sys-apps/gptfdisk/gptfdisk-1.0.7.ebuild
+++ b/sys-apps/gptfdisk/gptfdisk-1.0.7.ebuild
@@ -30,6 +30,10 @@ DEPEND="
 "
 BDEPEND="virtual/pkgconfig"
 
+PATCHES=(
+       "${FILESDIR}/${P}-remove_byteswap.patch" #797412
+)
+
 src_prepare() {
        default
 

Reply via email to