Opened 5 years ago

Closed 4 years ago

#13129 closed Bugs (obsolete)

bracket_and_solve_root, toms748_solve; underflow when max_iter == 0

Reported by: Tom C <clunietp@…> Owned by: John Maddock
Milestone: To Be Determined Component: math
Version: Boost 1.64.0 Severity: Problem
Keywords: Cc:

Description

~line 295, math/tools/toms748_solve.hpp

std::pair<T, T> toms748_solve(...)

Parameter max_iter is boost::uintmax_t. Line ~343 decrements count (--count) with no prior checks on the value of max_iter, resulting in an underflow if the provided max_iter==0.

This was discovered when calling bracket_and_solve root (with max_iters==15), which internally calls toms748_solve with max_iter==0, leading to the underflow/infinite(?) loop.

Unfortunately due to the nature of bracket_and_solve root I'm unable to provide a minimal repro, but to repro the underflow simply call toms748_solve with max_iter==0, which it does not appear to be checking against.

Alternatively/additionally, bracket_and_solve root is calling toms748_solve with max_iter==0; I don't know if that is desired behavior.

Change History (1)

comment:1 by John Maddock, 4 years ago

Resolution: obsolete
Status: newclosed
Note: See TracTickets for help on using tickets.