external/coinmp: Various UBSan issues

...as seen during CppunitTest_sc_solverobj,

> CglPreProcess.cpp:6432:21: runtime error: null pointer passed as argument 2, which is declared to never be null
> /usr/include/string.h:48:28: note: nonnull attribute specified here
>  #0 in CglPreProcess::addCutGenerator(CglCutGenerator*) at <null> (engine/instdir/program/libCgl.so.1 +0x2e858a)
>  #1 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x1dd308)
>  #2 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #3 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #4 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #5 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #6 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> CbcModel.cpp:11504:39: runtime error: null pointer passed as argument 2, which is declared to never be null
> /usr/include/string.h:48:28: note: nonnull attribute specified here
>  #0 in CbcModel::findIntegers(bool, int) at <null> (engine/instdir/program/libCbc.so.3 +0x2e0857)
>  #1 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x1dd7f3)
>  #2 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #3 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #4 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #5 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #6 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> CglPreProcess.cpp:1721:36: runtime error: 1.79769e+308 is outside the range of representable values of type 'int'
>  #0 in CglPreProcess::preProcessNonDefault(OsiSolverInterface&, int, int, int) at <null> (engine/instdir/program/libCgl.so.1 +0x2f71a6)
>  #1 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x1e4777)
>  #2 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #3 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #4 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #5 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #6 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> CglPreProcess.cpp:1722:36: runtime error: -1.79769e+308 is outside the range of representable values of type 'int'
>  #0 in CglPreProcess::preProcessNonDefault(OsiSolverInterface&, int, int, int) at <null> (engine/instdir/program/libCgl.so.1 +0x2f71d1)
>  #1 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x1e4777)
>  #2 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #3 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #4 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #5 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #6 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> CbcModel.cpp:7134:24: runtime error: null pointer passed as argument 2, which is declared to never be null
> /usr/include/string.h:48:28: note: nonnull attribute specified here
>  #0 in CbcModel::addHeuristic(CbcHeuristic*, char const*, int) at <null> (engine/instdir/program/libCbc.so.3 +0x3e315b)
>  #1 in doHeuristics(CbcModel*, int, CbcOrClpParam*, int, int, int) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x2ac48e)
>  #2 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x1d8334)
>  #3 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #4 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #5 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #6 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #7 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> CbcModel.cpp:7110:24: runtime error: null pointer passed as argument 2, which is declared to never be null
> /usr/include/string.h:48:28: note: nonnull attribute specified here
>  #0 in CbcModel::addCutGenerator(CglCutGenerator*, int, char const*, bool, bool, bool, int, int, int) at <null> (engine/instdir/program/libCbc.so.3 +0x349035)
>  #1 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x1d8efb)
>  #2 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #3 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #4 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #5 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #6 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> CbcModel.cpp:7119:30: runtime error: null pointer passed as argument 2, which is declared to never be null
> /usr/include/string.h:48:28: note: nonnull attribute specified here
>  #0 in CbcModel::addCutGenerator(CglCutGenerator*, int, char const*, bool, bool, bool, int, int, int) at <null> (engine/instdir/program/libCbc.so.3 +0x34921e)
>  #1 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x1d8efb)
>  #2 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #3 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #4 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #5 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #6 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> CglKnapsackCover.cpp:3908:36: runtime error: -1.79769e+308 is outside the range of representable values of type 'int'
>  #0 in CglKnapsackCover::createCliques(OsiSolverInterface&, int, int, bool) at <null> (engine/instdir/program/libCgl.so.1 +0x1af0ab)
>  #1 in CbcCutGenerator::CbcCutGenerator(CbcModel*, CglCutGenerator*, int, char const*, bool, bool, bool, int, int, int, int) at <null> (engine/instdir/program/libCbc.so.3 +0x7fb17)
>  #2 in CbcModel::addCutGenerator(CglCutGenerator*, int, char const*, bool, bool, bool, int, int, int) at <null> (engine/instdir/program/libCbc.so.3 +0x348ace)
>  #3 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x1d9c2d)
>  #4 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #5 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #6 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #7 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #8 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> CbcModel.cpp:9355:93: runtime error: division by zero
>  #0 in CbcModel::solveWithCuts(OsiCuts&, int, CbcNode*) at <null> (engine/instdir/program/libCbc.so.3 +0x371e89)
>  #1 in CbcModel::branchAndBound(int) at <null> (engine/instdir/program/libCbc.so.3 +0x33f172)
>  #2 in CbcHeuristic::smallBranchAndBound(OsiSolverInterface*, int, double*, double&, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>) const at <null> (engine/instdir/program/libCbc.so.3 +0x10643e)
>  #3 in CbcHeuristicFPump::solution(double&, double*) at <null> (engine/instdir/program/libCbc.so.3 +0x1a25ed)
>  #4 in CbcModel::doHeuristicsAtRoot(int) at <null> (engine/instdir/program/libCbc.so.3 +0x34fd61)
>  #5 in CbcModel::branchAndBound(int) at <null> (engine/instdir/program/libCbc.so.3 +0x306fec)
>  #6 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x215c37)
>  #7 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #8 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #9 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #10 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #11 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> CbcModel.cpp:9332:49: runtime error: division by zero
>  #0 in CbcModel::solveWithCuts(OsiCuts&, int, CbcNode*) at <null> (engine/instdir/program/libCbc.so.3 +0x3760c7)
>  #1 in CbcModel::branchAndBound(int) at <null> (engine/instdir/program/libCbc.so.3 +0x33f172)
>  #2 in CbcHeuristic::smallBranchAndBound(OsiSolverInterface*, int, double*, double&, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>) const at <null> (engine/instdir/program/libCbc.so.3 +0x10643e)
>  #3 in CbcHeuristicFPump::solution(double&, double*) at <null> (engine/instdir/program/libCbc.so.3 +0x1a25ed)
>  #4 in CbcModel::doHeuristicsAtRoot(int) at <null> (engine/instdir/program/libCbc.so.3 +0x34fd61)
>  #5 in CbcModel::branchAndBound(int) at <null> (engine/instdir/program/libCbc.so.3 +0x306fec)
>  #6 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x215c37)
>  #7 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #8 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #9 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #10 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #11 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> ClpSimplex.cpp:2560:34: runtime error: applying non-zero offset 120 to null pointer
>  #0 in ClpSimplex::gutsOfCopy(ClpSimplex const&) at <null> (engine/instdir/program/libClp.so.1 +0x6ab776)
>  #1 in ClpSimplex::ClpSimplex(ClpSimplex const&, int) at <null> (engine/instdir/program/libClp.so.1 +0x6a912b)
>  #2 in ClpPresolve::gutsOfPresolvedModel(ClpSimplex*, double, bool, int, bool, bool, char const*, char const*) at <null> (engine/instdir/program/libClp.so.1 +0x59c16c)
>  #3 in OsiClpSolverInterface::initialSolve() at <null> (engine/instdir/program/libOsiClp.so.1 +0xa53f)
>  #4 in CglPreProcess::postProcess(OsiSolverInterface&, bool) at <null> (engine/instdir/program/libCgl.so.1 +0x3600f1)
>  #5 in CbcHeuristic::smallBranchAndBound(OsiSolverInterface*, int, double*, double&, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>) const at <null> (engine/instdir/program/libCbc.so.3 +0x107ac1)
>  #6 in CbcHeuristicFPump::solution(double&, double*) at <null> (engine/instdir/program/libCbc.so.3 +0x1a25ed)
>  #7 in CbcModel::doHeuristicsAtRoot(int) at <null> (engine/instdir/program/libCbc.so.3 +0x34fd61)
>  #8 in CbcModel::branchAndBound(int) at <null> (engine/instdir/program/libCbc.so.3 +0x306fec)
>  #9 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x215c37)
>  #10 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #11 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #12 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #13 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #14 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> ClpSimplex.cpp:2563:34: runtime error: applying non-zero offset 120 to null pointer
>  #0 in ClpSimplex::gutsOfCopy(ClpSimplex const&) at <null> (engine/instdir/program/libClp.so.1 +0x6ab771)
>  #1 in ClpSimplex::ClpSimplex(ClpSimplex const&, int) at <null> (engine/instdir/program/libClp.so.1 +0x6a912b)
>  #2 in ClpPresolve::gutsOfPresolvedModel(ClpSimplex*, double, bool, int, bool, bool, char const*, char const*) at <null> (engine/instdir/program/libClp.so.1 +0x59c16c)
>  #3 in OsiClpSolverInterface::initialSolve() at <null> (engine/instdir/program/libOsiClp.so.1 +0xa53f)
>  #4 in CglPreProcess::postProcess(OsiSolverInterface&, bool) at <null> (engine/instdir/program/libCgl.so.1 +0x3600f1)
>  #5 in CbcHeuristic::smallBranchAndBound(OsiSolverInterface*, int, double*, double&, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>) const at <null> (engine/instdir/program/libCbc.so.3 +0x107ac1)
>  #6 in CbcHeuristicFPump::solution(double&, double*) at <null> (engine/instdir/program/libCbc.so.3 +0x1a25ed)
>  #7 in CbcModel::doHeuristicsAtRoot(int) at <null> (engine/instdir/program/libCbc.so.3 +0x34fd61)
>  #8 in CbcModel::branchAndBound(int) at <null> (engine/instdir/program/libCbc.so.3 +0x306fec)
>  #9 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x215c37)
>  #10 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #11 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #12 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #13 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #14 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> ClpSimplex.cpp:2567:37: runtime error: applying non-zero offset 120 to null pointer
>  #0 in ClpSimplex::gutsOfCopy(ClpSimplex const&) at <null> (engine/instdir/program/libClp.so.1 +0x6ab751)
>  #1 in ClpSimplex::ClpSimplex(ClpSimplex const&, int) at <null> (engine/instdir/program/libClp.so.1 +0x6a912b)
>  #2 in ClpPresolve::gutsOfPresolvedModel(ClpSimplex*, double, bool, int, bool, bool, char const*, char const*) at <null> (engine/instdir/program/libClp.so.1 +0x59c16c)
>  #3 in OsiClpSolverInterface::initialSolve() at <null> (engine/instdir/program/libOsiClp.so.1 +0xa53f)
>  #4 in CglPreProcess::postProcess(OsiSolverInterface&, bool) at <null> (engine/instdir/program/libCgl.so.1 +0x3600f1)
>  #5 in CbcHeuristic::smallBranchAndBound(OsiSolverInterface*, int, double*, double&, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>) const at <null> (engine/instdir/program/libCbc.so.3 +0x107ac1)
>  #6 in CbcHeuristicFPump::solution(double&, double*) at <null> (engine/instdir/program/libCbc.so.3 +0x1a25ed)
>  #7 in CbcModel::doHeuristicsAtRoot(int) at <null> (engine/instdir/program/libCbc.so.3 +0x34fd61)
>  #8 in CbcModel::branchAndBound(int) at <null> (engine/instdir/program/libCbc.so.3 +0x306fec)
>  #9 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x215c37)
>  #10 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #11 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #12 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #13 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #14 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> CglCliqueHelper.cpp:296:53: runtime error: division by zero
>  #0 in CglClique::createFractionalGraph() at <null> (engine/instdir/program/libCgl.so.1 +0x81b36)
>  #1 in CglClique::generateCuts(OsiSolverInterface const&, OsiCuts&, CglTreeInfo) at <null> (engine/instdir/program/libCgl.so.1 +0x60a26)
>  #2 in CglFakeClique::generateCuts(OsiSolverInterface const&, OsiCuts&, CglTreeInfo) at <null> (engine/instdir/program/libCgl.so.1 +0x72e73)
>  #3 in CbcCutGenerator::generateCuts(OsiCuts&, int, OsiSolverInterface*, CbcNode*) at <null> (engine/instdir/program/libCbc.so.3 +0x8281c)
>  #4 in CbcModel::serialCuts(OsiCuts&, CbcNode*, OsiCuts&, int) at <null> (engine/instdir/program/libCbc.so.3 +0x3f37a6)
>  #5 in CbcModel::solveWithCuts(OsiCuts&, int, CbcNode*) at <null> (engine/instdir/program/libCbc.so.3 +0x35d618)
>  #6 in CbcModel::branchAndBound(int) at <null> (engine/instdir/program/libCbc.so.3 +0x33f172)
>  #7 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x215c37)
>  #8 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #9 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #10 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #11 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #12 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> CglTwomir.cpp:1782:14: runtime error: division by zero
>  #0 in DGG_add2stepToList(DGG_constraint_t*, char*, double*, double*, DGG_list_t*, DGG_data_t*, DGG_constraint_t*) at <null> (engine/instdir/program/libCgl.so.1 +0x5c63ed)
>  #1 in DGG_generateCutsFromBase(DGG_constraint_t*, DGG_list_t*, DGG_data_t*, void const*) at <null> (engine/instdir/program/libCgl.so.1 +0x5c227e)
>  #2 in DGG_generateTabRowCuts(DGG_list_t*, DGG_data_t*, void const*) at <null> (engine/instdir/program/libCgl.so.1 +0x5aa163)
>  #3 in CglTwomir::generateCuts(OsiSolverInterface const&, OsiCuts&, CglTreeInfo) at <null> (engine/instdir/program/libCgl.so.1 +0x59c4bd)
>  #4 in CbcCutGenerator::generateCuts(OsiCuts&, int, OsiSolverInterface*, CbcNode*) at <null> (engine/instdir/program/libCbc.so.3 +0x8281c)
>  #5 in CbcModel::serialCuts(OsiCuts&, CbcNode*, OsiCuts&, int) at <null> (engine/instdir/program/libCbc.so.3 +0x3f3896)
>  #6 in CbcModel::solveWithCuts(OsiCuts&, int, CbcNode*) at <null> (engine/instdir/program/libCbc.so.3 +0x35d61b)
>  #7 in CbcModel::branchAndBound(int) at <null> (engine/instdir/program/libCbc.so.3 +0x33f172)
>  #8 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x215c37)
>  #9 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #10 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #11 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #12 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #13 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

and

> CglGomory.cpp:1317:30: runtime error: 3.84447e+09 is outside the range of representable values of type 'int'
>  #0 in CglGomory::generateCuts(OsiRowCutDebugger const*, OsiCuts&, CoinPackedMatrix const&, CoinPackedMatrix const&, double const*, double const*, double const*, double const*, double const*, char const*, CoinWarmStartBasis const*, CglTreeInfo) at <null> (engine/instdir/program/libCgl.so.1 +0x142933)
>  #1 in CglGomory::generateCuts(OsiSolverInterface const&, OsiCuts&, CglTreeInfo) at <null> (engine/instdir/program/libCgl.so.1 +0x1342e8)
>  #2 in CbcCutGenerator::generateCuts(OsiCuts&, int, OsiSolverInterface*, CbcNode*) at <null> (engine/instdir/program/libCbc.so.3 +0x8281c)
>  #3 in CbcModel::serialCuts(OsiCuts&, CbcNode*, OsiCuts&, int) at <null> (engine/instdir/program/libCbc.so.3 +0x3f3896)
>  #4 in CbcModel::solveWithCuts(OsiCuts&, int, CbcNode*) at <null> (engine/instdir/program/libCbc.so.3 +0x35d61b)
>  #5 in CbcModel::branchAndBound(int) at <null> (engine/instdir/program/libCbc.so.3 +0x33f172)
>  #6 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at <null> (engine/instdir/program/libCbcSolver.so.3 +0x215c37)
>  #7 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at <null> (engine/instdir/program/libCoinMP.so.1 +0x2c880)
>  #8 in CbcOptimizeProblem at <null> (engine/instdir/program/libCoinMP.so.1 +0x2fdeb)
>  #9 in (anonymous namespace)::CoinMPSolver::solve() at engine/sc/source/solver/CoinMPSolver.cxx:325:23
>  #10 in ScSolverSettings::solve() at engine/sc/source/ui/unoobj/solveruno.cxx:902:14
>  #11 in sc_apitest::ScSolverSettingsObj::testXSolverSettings() at engine/sc/qa/extras/scsolverobj.cxx:121:19

Signed-off-by: Stephan Bergmann <stephan.bergmann@collabora.com>
Change-Id: I8baaad0d3214da27cc85f76e267d4783dfae81e5
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/4150
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit 85b26ba51a219795938c82288e38518d7f9aec5e)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/206638
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
This commit is contained in:
Stephan Bergmann
2026-06-16 09:13:29 +02:00
committed by Xisco Fauli
parent 716cae1cd4
commit 6bc9e31108
+170
View File
@@ -1,3 +1,153 @@
--- Cbc/src/CbcModel.cpp
+++ Cbc/src/CbcModel.cpp
@@ -7107,7 +7107,7 @@
{
CbcCutGenerator ** temp = generator_;
generator_ = new CbcCutGenerator * [numberCutGenerators_+1];
- memcpy(generator_, temp, numberCutGenerators_*sizeof(CbcCutGenerator *));
+ if (numberCutGenerators_ != 0) memcpy(generator_, temp, numberCutGenerators_*sizeof(CbcCutGenerator *));
delete[] temp ;
generator_[numberCutGenerators_] =
new CbcCutGenerator(this, generator, howOften, name,
@@ -7116,7 +7116,7 @@
// and before any changes
temp = virginGenerator_;
virginGenerator_ = new CbcCutGenerator * [numberCutGenerators_+1];
- memcpy(virginGenerator_, temp, numberCutGenerators_*sizeof(CbcCutGenerator *));
+ if (numberCutGenerators_ != 0) memcpy(virginGenerator_, temp, numberCutGenerators_*sizeof(CbcCutGenerator *));
delete[] temp ;
virginGenerator_[numberCutGenerators_++] =
new CbcCutGenerator(this, generator, howOften, name,
@@ -7131,7 +7131,7 @@
{
CbcHeuristic ** temp = heuristic_;
heuristic_ = new CbcHeuristic * [numberHeuristics_+1];
- memcpy(heuristic_, temp, numberHeuristics_*sizeof(CbcHeuristic *));
+ if (numberHeuristics_ != 0) memcpy(heuristic_, temp, numberHeuristics_*sizeof(CbcHeuristic *));
delete [] temp;
int where;
if (before < 0 || before >= numberHeuristics_) {
@@ -9329,8 +9329,8 @@
adjustment should be made for calling frequency.
*/
int iProbing = -1;
- double smallProblem = (0.2 * totalCuts) /
- static_cast<double> (numberActiveGenerators) ;
+ double smallProblem = numberActiveGenerators == 0 ? 0.0 : (0.2 * totalCuts) /
+ static_cast<double> (numberActiveGenerators);
for (i = 0; i < numberCutGenerators_; i++) {
int howOften = generator_[i]->howOften() ;
/* Probing can be set to just do column cuts in treee.
@@ -9350,7 +9350,7 @@
bool probingWasOnBut = false;
CglProbing * probing = dynamic_cast<CglProbing*>(generator_[i]->generator());
if (probing && !numberNodes_) {
- if (generator_[i]->numberCutsInTotal()) {
+ if (generator_[i]->numberCutsInTotal() && numberActiveGenerators != 1) {
// If large number of probing - can be biased
smallProblem = (0.2 * (totalCuts - generator_[i]->numberCutsInTotal())) /
static_cast<double> (numberActiveGenerators - 1) ;
@@ -11501,7 +11501,7 @@
}
delete [] mark;
// Now append other objects
- memcpy(object_ + numberIntegers_, oldObject, nObjects*sizeof(OsiObject *));
+ if (nObjects != 0) memcpy(object_ + numberIntegers_, oldObject, nObjects*sizeof(OsiObject *));
// Delete old array (just array)
delete [] oldObject;
--- Cgl/src/CglClique/CglCliqueHelper.cpp
+++ Cgl/src/CglClique/CglCliqueHelper.cpp
@@ -293,7 +293,7 @@
nodes[i].nbrs = all_nbr + old_total;
}
- fgraph.density = static_cast<double> (total_deg) / (sp_numcols * (sp_numcols-1));
+ fgraph.density = sp_numcols == 1 ? 0.0 : static_cast<double> (total_deg) / (sp_numcols * (sp_numcols-1));
/*========================================================================*
Compute the min and max degree.
--- Cgl/src/CglGomory/CglGomory.cpp
+++ Cgl/src/CglGomory/CglGomory.cpp
@@ -2,6 +2,8 @@
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
+#include <algorithm>
+#include <limits>
#include <cstdlib>
#include <cstdio>
#include <cmath>
@@ -1314,7 +1316,7 @@
for (j=0; j<number+1;j++) {
double value = fabs(packed[j]);
double dxInt = value*multiplier;
- xInt[j]= static_cast<int> (dxInt+0.5);
+ xInt[j]= static_cast<int> (std::min<double>(std::max<double>(dxInt, std::numeric_limits<int>::min()), std::numeric_limits<int>::max())+0.5);
#if CGL_DEBUG>1
printf("%g => %g \n",value,dxInt);
#endif
--- Cgl/src/CglKnapsackCover/CglKnapsackCover.cpp
+++ Cgl/src/CglKnapsackCover/CglKnapsackCover.cpp
@@ -3,6 +3,8 @@
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
+#include <algorithm>
+#include <limits>
#include <cstdlib>
#include <cstdio>
#include <cmath>
@@ -3905,7 +3907,7 @@
}
}
int iUpper = static_cast<int> (floor(upperValue+1.0e-5));
- int iLower = static_cast<int> (ceil(lowerValue-1.0e-5));
+ int iLower = static_cast<int> (ceil(std::min<double>(std::max<double>(lowerValue, std::numeric_limits<int>::min()), std::numeric_limits<int>::max())-1.0e-5));
int state=0;
if (upperValue<1.0e6) {
if (iUpper==1-numberM1)
--- Cgl/src/CglPreProcess/CglPreProcess.cpp
+++ Cgl/src/CglPreProcess/CglPreProcess.cpp
@@ -7,6 +7,7 @@
#include <cmath>
#include <vector>
#include <algorithm>
+#include <limits>
#include <cfloat>
#include "CoinPragma.hpp"
@@ -1718,8 +1719,8 @@
}
if (allPlus)
nPossible++;
- int iUpper = static_cast<int> (floor(upperValue+1.0e-5));
- int iLower = static_cast<int> (ceil(lowerValue-1.0e-5));
+ int iUpper = static_cast<int> (floor(std::min<double>(std::max<double>(upperValue, std::numeric_limits<int>::min()), std::numeric_limits<int>::max())+1.0e-5));
+ int iLower = static_cast<int> (ceil(std::min<double>(std::max<double>(lowerValue, std::numeric_limits<int>::min()), std::numeric_limits<int>::max())-1.0e-5));
int state=0;
if (upperValue<1.0e6) {
if (iUpper==1-numberM1)
@@ -6429,7 +6430,7 @@
{
CglCutGenerator ** temp = generator_;
generator_ = new CglCutGenerator * [numberCutGenerators_+1];
- memcpy(generator_,temp,numberCutGenerators_*sizeof(CglCutGenerator *));
+ if (numberCutGenerators_ != 0) memcpy(generator_,temp,numberCutGenerators_*sizeof(CglCutGenerator *));
delete[] temp ;
generator_[numberCutGenerators_++]=generator->clone();
}
--- Cgl/src/CglTwomir/CglTwomir.cpp
+++ Cgl/src/CglTwomir/CglTwomir.cpp
@@ -1779,7 +1779,7 @@
norm_val += (cut->coeff[i]*cut->coeff[i]);
}
- norm_val /= cut->rhs * cut->rhs;
+ norm_val = cut->rhs == 0 ? COIN_DBL_MAX : norm_val / (cut->rhs * cut->rhs);
if (rc_val < best_rc_val ) {
best_rc_val = rc_val; best_rc_alpha = alpha; }
--- Clp/src/ClpParameters.hpp
+++ Clp/src/ClpParameters.hpp
@@ -81,7 +81,7 @@
@@ -9,3 +159,23 @@
}
/// And set
template <class T> inline void
--- Clp/src/ClpSimplex.cpp
+++ Clp/src/ClpSimplex.cpp
@@ -2557,14 +2557,14 @@
numberTotal = 2 * (maximumInternalColumns_ + maximumInternalRows_);
}
lower_ = ClpCopyOfArray(rhs.lower_, numberTotal);
- rowLowerWork_ = lower_ + numberColumns_;
+ rowLowerWork_ = lower_ == nullptr ? nullptr : lower_ + numberColumns_;
columnLowerWork_ = lower_;
upper_ = ClpCopyOfArray(rhs.upper_, numberTotal);
- rowUpperWork_ = upper_ + numberColumns_;
+ rowUpperWork_ = upper_ == nullptr ? nullptr : upper_ + numberColumns_;
columnUpperWork_ = upper_;
cost_ = ClpCopyOfArray(rhs.cost_, numberTotal);
objectiveWork_ = cost_;
- rowObjectiveWork_ = cost_ + numberColumns_;
+ rowObjectiveWork_ = cost_ == nullptr ? nullptr : cost_ + numberColumns_;
dj_ = ClpCopyOfArray(rhs.dj_, numberTotal);
if (dj_) {
reducedCostWork_ = dj_;