[llvm] [yaml2obj] Apply output size limit to COFF (PR #209695)

Haohai Wen via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 15 01:07:42 PDT 2026


================
@@ -509,78 +483,82 @@ static bool writeCOFF(COFFParser &CP, raw_ostream &OS) {
       } else {
         SymbolTableIndex = SymbolTableIndexMap[R.SymbolName];
       }
-      OS << binary_le(R.VirtualAddress) << binary_le(SymbolTableIndex)
-         << binary_le(R.Type);
+      CBA.write(R.VirtualAddress, LittleEndian);
+      CBA.write(SymbolTableIndex, LittleEndian);
+      CBA.write(R.Type, LittleEndian);
     }
   }
 
   // Output symbol table.
-
   for (std::vector<COFFYAML::Symbol>::const_iterator i = CP.Obj.Symbols.begin(),
                                                      e = CP.Obj.Symbols.end();
        i != e; ++i) {
-    OS.write(i->Header.Name, COFF::NameSize);
-    OS << binary_le(i->Header.Value);
+    CBA.write(i->Header.Name, COFF::NameSize);
+    CBA.write(i->Header.Value, LittleEndian);
     if (CP.useBigObj())
-      OS << binary_le(i->Header.SectionNumber);
+      CBA.write(i->Header.SectionNumber, LittleEndian);
     else
-      OS << binary_le(static_cast<int16_t>(i->Header.SectionNumber));
-    OS << binary_le(i->Header.Type) << binary_le(i->Header.StorageClass)
-       << binary_le(i->Header.NumberOfAuxSymbols);
+      CBA.write(static_cast<int16_t>(i->Header.SectionNumber), LittleEndian);
+    CBA.write(i->Header.Type, LittleEndian);
+    CBA.write(i->Header.StorageClass, LittleEndian);
+    CBA.write(i->Header.NumberOfAuxSymbols, LittleEndian);
 
     if (i->FunctionDefinition) {
-      OS << binary_le(i->FunctionDefinition->TagIndex)
-         << binary_le(i->FunctionDefinition->TotalSize)
-         << binary_le(i->FunctionDefinition->PointerToLinenumber)
-         << binary_le(i->FunctionDefinition->PointerToNextFunction)
-         << zeros(i->FunctionDefinition->unused);
-      OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
+      CBA.write(i->FunctionDefinition->TagIndex, LittleEndian);
+      CBA.write(i->FunctionDefinition->TotalSize, LittleEndian);
+      CBA.write(i->FunctionDefinition->PointerToLinenumber, LittleEndian);
+      CBA.write(i->FunctionDefinition->PointerToNextFunction, LittleEndian);
+      CBA.writeZeros(sizeof(i->FunctionDefinition->unused));
+      CBA.writeZeros(CP.getSymbolSize() - COFF::Symbol16Size);
     }
     if (i->bfAndefSymbol) {
-      OS << zeros(i->bfAndefSymbol->unused1)
-         << binary_le(i->bfAndefSymbol->Linenumber)
-         << zeros(i->bfAndefSymbol->unused2)
-         << binary_le(i->bfAndefSymbol->PointerToNextFunction)
-         << zeros(i->bfAndefSymbol->unused3);
-      OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
+      CBA.writeZeros(sizeof(i->bfAndefSymbol->unused1));
+      CBA.write(i->bfAndefSymbol->Linenumber, LittleEndian);
+      CBA.writeZeros(sizeof(i->bfAndefSymbol->unused2));
+      CBA.write(i->bfAndefSymbol->PointerToNextFunction, LittleEndian);
+      CBA.writeZeros(sizeof(i->bfAndefSymbol->unused3));
+      CBA.writeZeros(CP.getSymbolSize() - COFF::Symbol16Size);
     }
     if (i->WeakExternal) {
-      OS << binary_le(i->WeakExternal->TagIndex)
-         << binary_le(i->WeakExternal->Characteristics)
-         << zeros(i->WeakExternal->unused);
-      OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
+      CBA.write(i->WeakExternal->TagIndex, LittleEndian);
+      CBA.write(i->WeakExternal->Characteristics, LittleEndian);
+      CBA.writeZeros(sizeof(i->WeakExternal->unused));
+      CBA.writeZeros(CP.getSymbolSize() - COFF::Symbol16Size);
     }
     if (!i->File.empty()) {
       unsigned SymbolSize = CP.getSymbolSize();
       uint32_t NumberOfAuxRecords =
           (i->File.size() + SymbolSize - 1) / SymbolSize;
       uint32_t NumberOfAuxBytes = NumberOfAuxRecords * SymbolSize;
       uint32_t NumZeros = NumberOfAuxBytes - i->File.size();
-      OS.write(i->File.data(), i->File.size());
-      OS.write_zeros(NumZeros);
+      CBA.write(i->File.data(), i->File.size());
+      CBA.writeZeros(NumZeros);
     }
     if (i->SectionDefinition) {
-      OS << binary_le(i->SectionDefinition->Length)
-         << binary_le(i->SectionDefinition->NumberOfRelocations)
-         << binary_le(i->SectionDefinition->NumberOfLinenumbers)
-         << binary_le(i->SectionDefinition->CheckSum)
-         << binary_le(static_cast<int16_t>(i->SectionDefinition->Number))
-         << binary_le(i->SectionDefinition->Selection)
-         << zeros(i->SectionDefinition->unused)
-         << binary_le(static_cast<int16_t>(i->SectionDefinition->Number >> 16));
-      OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
+      CBA.write(i->SectionDefinition->Length, LittleEndian);
+      CBA.write(i->SectionDefinition->NumberOfRelocations, LittleEndian);
+      CBA.write(i->SectionDefinition->NumberOfLinenumbers, LittleEndian);
+      CBA.write(i->SectionDefinition->CheckSum, LittleEndian);
+      CBA.write(static_cast<int16_t>(i->SectionDefinition->Number),
+                LittleEndian);
+      CBA.write(i->SectionDefinition->Selection, LittleEndian);
+      CBA.writeZeros(sizeof(i->SectionDefinition->unused));
+      CBA.write(static_cast<int16_t>(i->SectionDefinition->Number >> 16),
+                LittleEndian);
+      CBA.writeZeros(CP.getSymbolSize() - COFF::Symbol16Size);
     }
     if (i->CLRToken) {
-      OS << binary_le(i->CLRToken->AuxType) << zeros(i->CLRToken->unused1)
-         << binary_le(i->CLRToken->SymbolTableIndex)
-         << zeros(i->CLRToken->unused2);
-      OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
+      CBA.write(i->CLRToken->AuxType, LittleEndian);
+      CBA.writeZeros(sizeof(i->CLRToken->unused1));
+      CBA.write(i->CLRToken->SymbolTableIndex, LittleEndian);
+      CBA.writeZeros(sizeof(i->CLRToken->unused2));
+      CBA.writeZeros(CP.getSymbolSize() - COFF::Symbol16Size);
     }
   }
 
   // Output string table.
   if (CP.Obj.Header.PointerToSymbolTable)
-    OS.write(&CP.StringTable[0], CP.StringTable.size());
+    CBA.write(&CP.StringTable[0], CP.StringTable.size());
----------------
HaohaiWen wrote:

Fixed. 5d48ec9

https://github.com/llvm/llvm-project/pull/209695


More information about the llvm-commits mailing list