Filter1 reads invalid memory

Issue #5 resolved
skreft created an issue

Running the tests with Valgrind reveals that Filter1 access an invalid memory position.

The problem is line:

double b = image->Area(x, y, x + w - 1, y + h_2 - 1);

As h_2, may be 0. This case is actually tested with res = Filter1(&integral_image, 0, 0, 1, 1, Subtract);

valgrind output:

==9421== Invalid read of size 8
==9421==    at 0x4480EA: Chromaprint::IntegralImage::Area(int, int, int, int) (in /home/user/chromaprint/tests/all_tests)
==9421==    by 0x448777: double Chromaprint::Filter1<double (*)(double, double)>(Chromaprint::IntegralImage*, int, int, int, int, double (*)(double, double)) (in /home/user/chromaprint/tests/all_tests)
==9421==    by 0x446B8A: FilterUtils_Filter1_Test::TestBody() (in /home/user/chromaprint/tests/all_tests)
==9421==    by 0x4E949BB: void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421==    by 0x4E8F66D: void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421==    by 0x4E7BC7A: testing::Test::Run() (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421==    by 0x4E7C3F7: testing::TestInfo::Run() (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421==    by 0x4E7C9D5: testing::TestCase::Run() (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421==    by 0x4E8199B: testing::internal::UnitTestImpl::RunAllTests() (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421==    by 0x4E95F4B: bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421==    by 0x4E90639: bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421==    by 0x4E806B3: testing::UnitTest::Run() (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421==  Address 0x658b738 is 8 bytes before a block of size 72 alloc'd
==9421==    at 0x4C286E7: operator new(unsigned long) (vg_replace_malloc.c:287)
==9421==    by 0x449099: __gnu_cxx::new_allocator<double>::allocate(unsigned long, void const*) (in /home/user/chromaprint/tests/all_tests)
==9421==    by 0x448F44: std::_Vector_base<double, std::allocator<double> >::_M_allocate(unsigned long) (in /home/user/chromaprint/tests/all_tests)
==9421==    by 0x448FF3: void std::vector<double, std::allocator<double> >::_M_range_initialize<double*>(double*, double*, std::forward_iterator_tag) (in /home/user/chromaprint/tests/all_tests)
==9421==    by 0x448EB2: void std::vector<double, std::allocator<double> >::_M_initialize_dispatch<double*>(double*, double*, std::__false_type) (in /home/user/chromaprint/tests/all_tests)
==9421==    by 0x448D97: std::vector<double, std::allocator<double> >::vector<double*>(double*, double*, std::allocator<double> const&) (in /home/user/chromaprint/tests/all_tests)
==9421==    by 0x448622: Chromaprint::Image::Image<double*>(int, double*, double*) (in /home/user/chromaprint/tests/all_tests)
==9421==    by 0x446B4D: FilterUtils_Filter1_Test::TestBody() (in /home/user/chromaprint/tests/all_tests)
==9421==    by 0x4E949BB: void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421==    by 0x4E8F66D: void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421==    by 0x4E7BC7A: testing::Test::Run() (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421==    by 0x4E7C3F7: testing::TestInfo::Run() (in /home/user/chromaprint/tests/gtest_build/libgtest.so)
==9421== 

Comments (2)

  1. Log in to comment