Don't assume llvm::StringRef is null terminated
StringRefs have a length and their contents are not usually null-terminated. The solution is to either copy the string data (in rustc_llvm::diagnostic) or take the size into account (in LLVMRustPrintPasses). I couldn't trigger a bug caused by this (apparently all the strings returned in practice are actually null-terminated) but this is more correct and more future-proof.
This commit is contained in:
parent
c7ddb8946b
commit
85dc08e525
5 changed files with 26 additions and 28 deletions
|
@ -530,9 +530,11 @@ LLVMRustPrintPasses() {
|
|||
struct MyListener : PassRegistrationListener {
|
||||
void passEnumerate(const PassInfo *info) {
|
||||
#if LLVM_VERSION_GE(4, 0)
|
||||
if (!info->getPassArgument().empty()) {
|
||||
printf("%15s - %s\n", info->getPassArgument().data(),
|
||||
info->getPassName().data());
|
||||
StringRef PassArg = info->getPassArgument();
|
||||
StringRef PassName = info->getPassName();
|
||||
if (!PassArg.empty()) {
|
||||
printf("%15.*s - %.*s\n", PassArg.size(), PassArg.data(),
|
||||
PassName.size(), PassName.data());
|
||||
}
|
||||
#else
|
||||
if (info->getPassArgument() && *info->getPassArgument()) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue