From 5c83a0d2ce41fa4b7b39d13c69d39990f7c926f5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Michel=20D=C3=A4nzer?= Date: Thu, 22 Jan 2015 12:30:24 +0900 Subject: [PATCH] st/clover: Pass target instead of target.begin() to std::string() Fixes reading beyond allocated memory: ==1936== Invalid read of size 1 ==1936== at 0x4C2C1B4: strlen (vg_replace_strmem.c:412) ==1936== by 0x9E00C30: std::basic_string, std::allocator >::basic_string(char const*, std::allocator const&) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20) ==1936== by 0x5B44FAE: clover::compile_program_llvm(clover::compat::string const&, clover::compat::vector > const&, pipe_shader_ir, clover::compat::string const&, clover::compat::string const&, clover::compat::string&) (invocation.cpp:698) ==1936== by 0x5B39A20: clover::program::build(clover::ref_vector const&, char const*, clover::compat::vector > const&) (program.cpp:63) ==1936== by 0x5B20152: clBuildProgram (program.cpp:182) ==1936== by 0x400F41: main (hello_world.c:109) ==1936== Address 0x56fee1f is 0 bytes after a block of size 15 alloc'd ==1936== at 0x4C28C20: malloc (vg_replace_malloc.c:296) ==1936== by 0x5B398F0: alloc (compat.hpp:59) ==1936== by 0x5B398F0: vector > (compat.hpp:98) ==1936== by 0x5B398F0: string > (compat.hpp:327) ==1936== by 0x5B398F0: clover::program::build(clover::ref_vector const&, char const*, clover::compat::vector > const&) (program.cpp:63) ==1936== by 0x5B20152: clBuildProgram (program.cpp:182) ==1936== by 0x400F41: main (hello_world.c:109) Reviewed-by: Francisco Jerez --- src/gallium/state_trackers/clover/llvm/invocation.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp index 7a0be539319..edeed56ea90 100644 --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp @@ -699,9 +699,9 @@ clover::compile_program_llvm(const compat::string &source, debug_options, 0); std::vector kernels; - size_t processor_str_len = std::string(target.begin()).find_first_of("-"); - std::string processor(target.begin(), 0, processor_str_len); - std::string triple(target.begin(), processor_str_len + 1, + size_t processor_str_len = std::string(target).find_first_of("-"); + std::string processor(target, 0, processor_str_len); + std::string triple(target, processor_str_len + 1, target.size() - processor_str_len - 1); clang::LangAS::Map address_spaces; llvm::LLVMContext llvm_ctx; -- 2.30.2