From 10b776df22185f15cc99a037bbe0802d8839bae0 Mon Sep 17 00:00:00 2001 From: Eric Beckmann Date: Tue, 13 Jun 2017 20:53:31 +0000 Subject: [PATCH] Fix a bug introduced in r305092 on big-endian systems. Summary: We were writing the length of the string based on system-endianness, and not universally little-endian. This fixes that. Reviewers: zturner Subscribers: hiraditya, llvm-commits Differential Revision: https://reviews.llvm.org/D34159 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@305322 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Object/WindowsResource.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/Object/WindowsResource.cpp b/lib/Object/WindowsResource.cpp index fdf4690e604..a1a0d96acbc 100644 --- a/lib/Object/WindowsResource.cpp +++ b/lib/Object/WindowsResource.cpp @@ -691,10 +691,8 @@ void WindowsResourceCOFFWriter::writeDirectoryStringTable() { // Now write the directory string table for .rsrc$01 uint32_t TotalStringTableSize = 0; for (auto String : StringTable) { - auto *LengthField = - reinterpret_cast(BufferStart + CurrentOffset); uint16_t Length = String.size(); - *LengthField = Length; + support::endian::write16le(BufferStart + CurrentOffset, Length); CurrentOffset += sizeof(uint16_t); auto *Start = reinterpret_cast(BufferStart + CurrentOffset); std::copy(String.begin(), String.end(), Start); -- 2.50.1