<table><tr><td style="">This revision was automatically updated to reflect the committed changes.<br />Closed by commit rL282709: [ELF] - Fixed crash on invalid input. (authored by grimar).
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://reviews.llvm.org/D24970" rel="noreferrer">View Revision</a></tr></table><br /><div><strong><strong>Changed prior to commit:</strong></strong><div><a href="https://reviews.llvm.org/D24970?vs=72670&id=72967#toc" rel="noreferrer">https://reviews.llvm.org/D24970?vs=72670&id=72967#toc</a></div></div><br /><div><strong><strong>Repository:</strong></strong><div><div>rL LLVM</div></div></div><br /><div><a href="https://reviews.llvm.org/D24970" rel="noreferrer">https://reviews.llvm.org/D24970</a></div><br /><div><strong><strong>Files:</strong></strong><div><div>lld/trunk/ELF/Writer.cpp<br />
lld/trunk/test/ELF/invalid/Inputs/symbol-name-offset.elf<br />
lld/trunk/test/ELF/invalid/symbol-name.s</div></div></div><br /><div><div style="margin: 6px 0 12px 0;"><div style="border: 1px solid #C7CCD9; border-radius: 3px;"><div style="color: #74777d; background: #eff2f4; padding: 6px 8px; overflow: hidden;"><span style="color: #4b4d51; font-weight: bold;">lld/trunk/ELF/Writer.cpp</span></div><div style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; white-space: pre-wrap; clear: both; padding: 4px 0; margin: 0;"><div style="padding: 0 8px; margin: 0 4px; "> return;
</div><div style="padding: 0 8px; margin: 0 4px; "> for (elf::ObjectFile<ELFT> *F : Symtab<ELFT>::X->getObjectFiles()) {
</div><div style="padding: 0 8px; margin: 0 4px; background: #ffd0d0;"> <span class="bright">const char *</span>StrTab = F->getStringTable<span class="bright">().data</span>();
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"> <span class="bright">StringRef </span>StrTab = F->getStringTable();
</div><div style="padding: 0 8px; margin: 0 4px; "> for (SymbolBody *B : F->getLocalSymbols()) {
</div><div style="padding: 0 8px; margin: 0 4px; "> auto *DR = dyn_cast<DefinedRegular<ELFT>>(B);
</div><div style="padding: 0 8px; margin: 0 4px; background: #F7F7F7; color: #74777D; border-style: dashed; border-color: #C7CCD9; border-width: 1px 0;">...</div><div style="padding: 0 8px; margin: 0 4px; "> if (!includeInSymtab<ELFT>(*B))
</div><div style="padding: 0 8px; margin: 0 4px; "> continue;
</div><div style="padding: 0 8px; margin: 0 4px; background: #ffd0d0;"> <span class="bright">StringRef SymName(StrTab + </span>B->getNameOffset()<span class="bright">);</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"> <span class="bright">if (</span>B->getNameOffset()<span class="bright"> >= StrTab.size())</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"> fatal(getFilename(F) + ": invalid symbol name offset");
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"> StringRef SymName(StrTab.data() + B->getNameOffset());
</div><div style="padding: 0 8px; margin: 0 4px; "> InputSectionBase<ELFT> *Sec = DR->Section;
</div><div style="padding: 0 8px; margin: 0 4px; "> if (!shouldKeepInSymtab<ELFT>(Sec, SymName, *B))
</div></div></div><br /><div style="border: 1px solid #C7CCD9; border-radius: 3px;"><div style="color: #74777d; background: #eff2f4; padding: 6px 8px; overflow: hidden;"><span style="color: #4b4d51; font-weight: bold;">lld/trunk/test/ELF/invalid/symbol-name.s</span></div><div style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; white-space: pre-wrap; clear: both; padding: 4px 0; margin: 0;"><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"># REQUIRES: x86
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;">
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;">## symbol-name-offset.elf contains symbol with invalid (too large)
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;">## st_name value.
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"># RUN: not ld.lld %S/Inputs/symbol-name-offset.elf \
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"># RUN: -o %t 2>&1 | FileCheck %s
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"># CHECK: invalid symbol name offset
</div></div></div><br /><div style="border: 1px solid #C7CCD9; border-radius: 3px;"><div style="color: #74777d; background: #eff2f4; padding: 6px 8px; overflow: hidden;"><span style="color: #4b4d51; font-weight: bold;">lld/trunk/test/ELF/invalid/Inputs/symbol-name-offset.elf</span></div><div style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; white-space: pre-wrap; clear: both; padding: 4px 0; margin: 0;"></div></div></div></div><br />