r-lidar / rlas

R package to read and write las and laz files used to store LiDAR data
https://cran.r-project.org/package=rlas
GNU General Public License v3.0
34 stars 14 forks source link

Valgrind uninitialised value(s) #9

Closed Jean-Romain closed 6 years ago

Jean-Romain commented 6 years ago

Testing with valgrind, streaming produces errors

R -d "valgrind --track-origins=yes --tool=memcheck --leak-check=full" --vanilla < rlastest.r

rlastest.r being the two incriminated tests of the package

library(rlas)
library(testthat)

test_that("streaming works", {
  lazfile <- system.file("extdata", "example.laz", package="rlas")
  ofile = paste0(tempfile(), ".las")

  las1 = readlasdata(lazfile, filter = "-keep_first")
  rlas:::streamlasdata(lazfile, ofile, "-keep_first")
  las2 = readlasdata(ofile)

  expect_equal(las1, las2)
})

test_that("streaming works with extra bytes", {
  lazfile <- system.file("extdata", "extra_byte.laz", package="rlas")
  ofile = paste0(tempfile(), ".las")

  las1 = readlasdata(lazfile, filter = "-keep_first")
  rlas:::streamlasdata(lazfile, ofile, "-keep_first")
  las2 = readlasdata(ofile)

  expect_equal(las1, las2)
})
==6793== Conditional jump or move depends on uninitialised value(s)
==6793==    at 0xD5A655B: std::vector<double, std::allocator<double> >::reserve(unsigned long) (vector.tcc:68)
==6793==    by 0xD5A0C14: RLASstreamer::allocation() (rlasstreamer.cpp:198)
==6793==    by 0xD5AC5EF: lasdatareader(Rcpp::Vector<16, Rcpp::PreserveStorage>, Rcpp::Vector<16, Rcpp::PreserveStorage>, Rcpp::Vector<16, Rcpp::PreserveStorage>, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, Rcpp::Vector<13, Rcpp::PreserveStorage>) (readLAS.cpp:81)
==6793==    by 0xD5C0BCF: _rlas_lasdatareader (RcppExports.cpp:63)
==6793==    by 0x4F0C661: ??? (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F0CC9B: ??? (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F4A0AC: Rf_eval (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F4CB4D: ??? (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F49E8B: Rf_eval (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F4BEAE: ??? (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F49C55: Rf_eval (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F4DCB5: ??? (in /usr/lib/R/lib/libR.so)
==6793==  Uninitialised value was created by a stack allocation
==6793==    at 0xD5AC309: lasdatareader(Rcpp::Vector<16, Rcpp::PreserveStorage>, Rcpp::Vector<16, Rcpp::PreserveStorage>, Rcpp::Vector<16, Rcpp::PreserveStorage>, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, Rcpp::Vector<13, Rcpp::PreserveStorage>) (readLAS.cpp:63)
==6793== 
==6793== Conditional jump or move depends on uninitialised value(s)
==6793==    at 0xD5A6575: std::vector<double, std::allocator<double> >::reserve(unsigned long) (vector.tcc:70)
==6793==    by 0xD5A0C14: RLASstreamer::allocation() (rlasstreamer.cpp:198)
==6793==    by 0xD5AC5EF: lasdatareader(Rcpp::Vector<16, Rcpp::PreserveStorage>, Rcpp::Vector<16, Rcpp::PreserveStorage>, Rcpp::Vector<16, Rcpp::PreserveStorage>, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, Rcpp::Vector<13, Rcpp::PreserveStorage>) (readLAS.cpp:81)
==6793==    by 0xD5C0BCF: _rlas_lasdatareader (RcppExports.cpp:63)
==6793==    by 0x4F0C661: ??? (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F0CC9B: ??? (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F4A0AC: Rf_eval (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F4CB4D: ??? (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F49E8B: Rf_eval (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F4BEAE: ??? (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F49C55: Rf_eval (in /usr/lib/R/lib/libR.so)
==6793==    by 0x4F4DCB5: ??? (in /usr/lib/R/lib/libR.so)
==6793==  Uninitialised value was created by a stack allocation
==6793==    at 0xD5AC309: lasdatareader(Rcpp::Vector<16, Rcpp::PreserveStorage>, Rcpp::Vector<16, Rcpp::PreserveStorage>, Rcpp::Vector<16, Rcpp::PreserveStorage>, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, Rcpp::Vector<13, Rcpp::PreserveStorage>) (readLAS.cpp:63)
==6793==