UrbanAnalyst / gtfsrouter

Routing and analysis engine for GTFS (General Transit Feed Specification) data
https://urbananalyst.github.io/gtfsrouter/
80 stars 17 forks source link

CRAN UBSAN issues #111

Closed mpadge closed 10 months ago

mpadge commented 10 months ago

Dear maintainer,

Please see the problems shown on https://cran.r-project.org/web/checks/check_results_gtfsrouter.html.

Please correct before 2023-09-01 to safely retain your package on CRAN.

Do remember to look at the 'Additional issues'.

The CRAN Team

Those additional issues include:

> ### Name: gtfs_traveltimes
> ### Title: gtfs_traveltimes
> ### Aliases: gtfs_traveltimes
> 
> ### ** Examples
> 
> # Examples must be run on single thread only:
> data.table::setDTthreads (1)
> 
> berlin_gtfs_to_zip ()
[1] "/tmp/Rtmp5ElFUf/vbb.zip"
> f <- file.path (tempdir (), "vbb.zip")
> g <- extract_gtfs (f)
▶ Unzipping GTFS archive
✔ Unzipped GTFS archive  
▶ Extracting GTFS feed
✔ Extracted GTFS feed 
▶ Converting stop times to seconds
✔ Converted stop times to seconds 
▶ Converting transfer times to seconds
✔ Converted transfer times to seconds 
> g <- gtfs_timetable (g)
Day not specified; extracting timetable for friday
> from <- "Alexanderplatz"
> start_times <- 12 * 3600 + c (0, 60) * 60 # 8:00-9:00
> res <- gtfs_traveltimes (g, from, start_times)
traveltimes.cpp:367:69: runtime error: signed integer overflow: 2147483647 + 1 cannot be represented in type 'int'
    #0 0x7f0062bad513 in iso::fill_one_transfer(unsigned long const&, unsigned long const&, int const&, unsigned long const&, int const&, bool const&, Iso&) /data/gannet/ripley/R/packages/tests-gcc-SAN/gtfsrouter/src/traveltimes.cpp:367
    #1 0x7f0062bb2582 in iso::trace_forward_traveltimes(Iso&, int const&, int const&, std::vector<unsigned long, std::allocator<unsigned long> > const&, std::vector<unsigned long, std::allocator<unsigned long> > const&, std::vector<unsigned long, std::allocator<unsigned long> > const&, std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> > const&, std::unordered_map<unsigned long, std::unordered_map<unsigned long, int, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, int> > >, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, std::unordered_map<unsigned long, int, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, int> > > > > > const&, std::unordered_set<unsigned long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<unsigned long> > const&, bool const&) /data/gannet/ripley/R/packages/tests-gcc-SAN/gtfsrouter/src/traveltimes.cpp:70
    #2 0x7f0062b881ab in rcpp_traveltimes(Rcpp::DataFrame_Impl<Rcpp::PreserveStorage>, Rcpp::DataFrame_Impl<Rcpp::PreserveStorage>, unsigned long, std::vector<unsigned long, std::allocator<unsigned long> >, int, int, bool, int) /data/gannet/ripley/R/packages/tests-gcc-SAN/gtfsrouter/src/traveltimes-rcpp.cpp:51

plus from the vignettes:

---
--- re-building ‘gtfsrouter.Rmd’ using rmarkdown
--- finished re-building ‘gtfsrouter.Rmd’

--- re-building ‘transfers.Rmd’ using rmarkdown
traveltimes.cpp:367:69: runtime error: signed integer overflow: 2147483647 + 1 cannot be represented in type 'int'
    #0 0x7f3a00d97c00 in iso::fill_one_transfer(unsigned long const&, unsigned long const&, int const&, unsigned long const&, int const&, bool const&, Iso&) /data/gannet/ripley/R/packages/tests-clang-SAN/gtfsrouter/src/traveltimes.cpp:367:69
    #1 0x7f3a00d93da0 in iso::trace_forward_traveltimes(Iso&, int const&, int const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::unordered_map<unsigned long, std::__1::unordered_map<unsigned long, int, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<std::__1::pair<unsigned long const, int> > >, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<std::__1::pair<unsigned long const, std::__1::unordered_map<unsigned long, int, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<std::__1::pair<unsigned long const, int> > > > > > const&, std::__1::unordered_set<unsigned long, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<unsigned long> > const&, bool const&) /data/gannet/ripley/R/packages/tests-clang-SAN/gtfsrouter/src/traveltimes.cpp:70:21
    #2 0x7f3a00d881ac in rcpp_traveltimes(Rcpp::DataFrame_Impl<Rcpp::PreserveStorage>, Rcpp::DataFrame_Impl<Rcpp::PreserveStorage>, unsigned long, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >, int, int, bool, int) /data/gannet/ripley/R/packages/tests-clang-SAN/gtfsrouter/src/traveltimes-rcpp.cpp:51:5

...

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior traveltimes.cpp:367:69 in 
--- finished re-building ‘transfers.Rmd’

--- re-building ‘traveltimes.Rmd’ using rmarkdown
traveltimes.cpp:367:69: runtime error: signed integer overflow: 2147483647 + 1 cannot be represented in type 'int'
    #0 0x7f9306fd0c00 in iso::fill_one_transfer(unsigned long const&, unsigned long const&, int const&, unsigned long const&, int const&, bool const&, Iso&) /data/gannet/ripley/R/packages/tests-clang-SAN/gtfsrouter/src/traveltimes.cpp:367:69
    #1 0x7f9306fccda0 in iso::trace_forward_traveltimes(Iso&, int const&, int const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::unordered_map<unsigned long, std::__1::unordered_map<unsigned long, int, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<std::__1::pair<unsigned long const, int> > >, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<std::__1::pair<unsigned long const, std::__1::unordered_map<unsigned long, int, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<std::__1::pair<unsigned long const, int> > > > > > const&, std::__1::unordered_set<unsigned long, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<unsigned long> > const&, bool const&) /data/gannet/ripley/R/packages/tests-clang-SAN/gtfsrouter/src/traveltimes.cpp:70:21
    #2 0x7f9306fc11ac in rcpp_traveltimes(Rcpp::DataFrame_Impl<Rcpp::PreserveStorage>, Rcpp::DataFrame_Impl<Rcpp::PreserveStorage>, unsigned long, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >, int, int, bool, int) /data/gannet/ripley/R/packages/tests-clang-SAN/gtfsrouter/src/traveltimes-rcpp.cpp:51:5
...

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior traveltimes.cpp:367:69 in 
--- finished re-building ‘traveltimes.Rmd’

They're all signed integer overflow issues.