1
Fork 0

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:
Robin Kruppe 2016-11-28 15:15:51 +01:00
parent c7ddb8946b
commit 85dc08e525
5 changed files with 26 additions and 28 deletions

View file

@ -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()) {