From 6bc9e311089aa9b857c86c7dc7f31552b47f54c7 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Tue, 9 Jun 2026 16:53:07 +0200 Subject: [PATCH] external/coinmp: Various UBSan issues MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ...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 (engine/instdir/program/libCgl.so.1 +0x2e858a) > #1 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x1dd308) > #2 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #3 in CbcOptimizeProblem at (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 (engine/instdir/program/libCbc.so.3 +0x2e0857) > #1 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x1dd7f3) > #2 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #3 in CbcOptimizeProblem at (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 (engine/instdir/program/libCgl.so.1 +0x2f71a6) > #1 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x1e4777) > #2 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #3 in CbcOptimizeProblem at (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 (engine/instdir/program/libCgl.so.1 +0x2f71d1) > #1 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x1e4777) > #2 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #3 in CbcOptimizeProblem at (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 (engine/instdir/program/libCbc.so.3 +0x3e315b) > #1 in doHeuristics(CbcModel*, int, CbcOrClpParam*, int, int, int) at (engine/instdir/program/libCbcSolver.so.3 +0x2ac48e) > #2 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x1d8334) > #3 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #4 in CbcOptimizeProblem at (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 (engine/instdir/program/libCbc.so.3 +0x349035) > #1 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x1d8efb) > #2 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #3 in CbcOptimizeProblem at (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 (engine/instdir/program/libCbc.so.3 +0x34921e) > #1 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x1d8efb) > #2 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #3 in CbcOptimizeProblem at (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 (engine/instdir/program/libCgl.so.1 +0x1af0ab) > #1 in CbcCutGenerator::CbcCutGenerator(CbcModel*, CglCutGenerator*, int, char const*, bool, bool, bool, int, int, int, int) at (engine/instdir/program/libCbc.so.3 +0x7fb17) > #2 in CbcModel::addCutGenerator(CglCutGenerator*, int, char const*, bool, bool, bool, int, int, int) at (engine/instdir/program/libCbc.so.3 +0x348ace) > #3 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x1d9c2d) > #4 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #5 in CbcOptimizeProblem at (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 (engine/instdir/program/libCbc.so.3 +0x371e89) > #1 in CbcModel::branchAndBound(int) at (engine/instdir/program/libCbc.so.3 +0x33f172) > #2 in CbcHeuristic::smallBranchAndBound(OsiSolverInterface*, int, double*, double&, double, std::__cxx11::basic_string, std::allocator>) const at (engine/instdir/program/libCbc.so.3 +0x10643e) > #3 in CbcHeuristicFPump::solution(double&, double*) at (engine/instdir/program/libCbc.so.3 +0x1a25ed) > #4 in CbcModel::doHeuristicsAtRoot(int) at (engine/instdir/program/libCbc.so.3 +0x34fd61) > #5 in CbcModel::branchAndBound(int) at (engine/instdir/program/libCbc.so.3 +0x306fec) > #6 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x215c37) > #7 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #8 in CbcOptimizeProblem at (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 (engine/instdir/program/libCbc.so.3 +0x3760c7) > #1 in CbcModel::branchAndBound(int) at (engine/instdir/program/libCbc.so.3 +0x33f172) > #2 in CbcHeuristic::smallBranchAndBound(OsiSolverInterface*, int, double*, double&, double, std::__cxx11::basic_string, std::allocator>) const at (engine/instdir/program/libCbc.so.3 +0x10643e) > #3 in CbcHeuristicFPump::solution(double&, double*) at (engine/instdir/program/libCbc.so.3 +0x1a25ed) > #4 in CbcModel::doHeuristicsAtRoot(int) at (engine/instdir/program/libCbc.so.3 +0x34fd61) > #5 in CbcModel::branchAndBound(int) at (engine/instdir/program/libCbc.so.3 +0x306fec) > #6 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x215c37) > #7 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #8 in CbcOptimizeProblem at (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 (engine/instdir/program/libClp.so.1 +0x6ab776) > #1 in ClpSimplex::ClpSimplex(ClpSimplex const&, int) at (engine/instdir/program/libClp.so.1 +0x6a912b) > #2 in ClpPresolve::gutsOfPresolvedModel(ClpSimplex*, double, bool, int, bool, bool, char const*, char const*) at (engine/instdir/program/libClp.so.1 +0x59c16c) > #3 in OsiClpSolverInterface::initialSolve() at (engine/instdir/program/libOsiClp.so.1 +0xa53f) > #4 in CglPreProcess::postProcess(OsiSolverInterface&, bool) at (engine/instdir/program/libCgl.so.1 +0x3600f1) > #5 in CbcHeuristic::smallBranchAndBound(OsiSolverInterface*, int, double*, double&, double, std::__cxx11::basic_string, std::allocator>) const at (engine/instdir/program/libCbc.so.3 +0x107ac1) > #6 in CbcHeuristicFPump::solution(double&, double*) at (engine/instdir/program/libCbc.so.3 +0x1a25ed) > #7 in CbcModel::doHeuristicsAtRoot(int) at (engine/instdir/program/libCbc.so.3 +0x34fd61) > #8 in CbcModel::branchAndBound(int) at (engine/instdir/program/libCbc.so.3 +0x306fec) > #9 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x215c37) > #10 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #11 in CbcOptimizeProblem at (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 (engine/instdir/program/libClp.so.1 +0x6ab771) > #1 in ClpSimplex::ClpSimplex(ClpSimplex const&, int) at (engine/instdir/program/libClp.so.1 +0x6a912b) > #2 in ClpPresolve::gutsOfPresolvedModel(ClpSimplex*, double, bool, int, bool, bool, char const*, char const*) at (engine/instdir/program/libClp.so.1 +0x59c16c) > #3 in OsiClpSolverInterface::initialSolve() at (engine/instdir/program/libOsiClp.so.1 +0xa53f) > #4 in CglPreProcess::postProcess(OsiSolverInterface&, bool) at (engine/instdir/program/libCgl.so.1 +0x3600f1) > #5 in CbcHeuristic::smallBranchAndBound(OsiSolverInterface*, int, double*, double&, double, std::__cxx11::basic_string, std::allocator>) const at (engine/instdir/program/libCbc.so.3 +0x107ac1) > #6 in CbcHeuristicFPump::solution(double&, double*) at (engine/instdir/program/libCbc.so.3 +0x1a25ed) > #7 in CbcModel::doHeuristicsAtRoot(int) at (engine/instdir/program/libCbc.so.3 +0x34fd61) > #8 in CbcModel::branchAndBound(int) at (engine/instdir/program/libCbc.so.3 +0x306fec) > #9 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x215c37) > #10 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #11 in CbcOptimizeProblem at (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 (engine/instdir/program/libClp.so.1 +0x6ab751) > #1 in ClpSimplex::ClpSimplex(ClpSimplex const&, int) at (engine/instdir/program/libClp.so.1 +0x6a912b) > #2 in ClpPresolve::gutsOfPresolvedModel(ClpSimplex*, double, bool, int, bool, bool, char const*, char const*) at (engine/instdir/program/libClp.so.1 +0x59c16c) > #3 in OsiClpSolverInterface::initialSolve() at (engine/instdir/program/libOsiClp.so.1 +0xa53f) > #4 in CglPreProcess::postProcess(OsiSolverInterface&, bool) at (engine/instdir/program/libCgl.so.1 +0x3600f1) > #5 in CbcHeuristic::smallBranchAndBound(OsiSolverInterface*, int, double*, double&, double, std::__cxx11::basic_string, std::allocator>) const at (engine/instdir/program/libCbc.so.3 +0x107ac1) > #6 in CbcHeuristicFPump::solution(double&, double*) at (engine/instdir/program/libCbc.so.3 +0x1a25ed) > #7 in CbcModel::doHeuristicsAtRoot(int) at (engine/instdir/program/libCbc.so.3 +0x34fd61) > #8 in CbcModel::branchAndBound(int) at (engine/instdir/program/libCbc.so.3 +0x306fec) > #9 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x215c37) > #10 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #11 in CbcOptimizeProblem at (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 (engine/instdir/program/libCgl.so.1 +0x81b36) > #1 in CglClique::generateCuts(OsiSolverInterface const&, OsiCuts&, CglTreeInfo) at (engine/instdir/program/libCgl.so.1 +0x60a26) > #2 in CglFakeClique::generateCuts(OsiSolverInterface const&, OsiCuts&, CglTreeInfo) at (engine/instdir/program/libCgl.so.1 +0x72e73) > #3 in CbcCutGenerator::generateCuts(OsiCuts&, int, OsiSolverInterface*, CbcNode*) at (engine/instdir/program/libCbc.so.3 +0x8281c) > #4 in CbcModel::serialCuts(OsiCuts&, CbcNode*, OsiCuts&, int) at (engine/instdir/program/libCbc.so.3 +0x3f37a6) > #5 in CbcModel::solveWithCuts(OsiCuts&, int, CbcNode*) at (engine/instdir/program/libCbc.so.3 +0x35d618) > #6 in CbcModel::branchAndBound(int) at (engine/instdir/program/libCbc.so.3 +0x33f172) > #7 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x215c37) > #8 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #9 in CbcOptimizeProblem at (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 (engine/instdir/program/libCgl.so.1 +0x5c63ed) > #1 in DGG_generateCutsFromBase(DGG_constraint_t*, DGG_list_t*, DGG_data_t*, void const*) at (engine/instdir/program/libCgl.so.1 +0x5c227e) > #2 in DGG_generateTabRowCuts(DGG_list_t*, DGG_data_t*, void const*) at (engine/instdir/program/libCgl.so.1 +0x5aa163) > #3 in CglTwomir::generateCuts(OsiSolverInterface const&, OsiCuts&, CglTreeInfo) at (engine/instdir/program/libCgl.so.1 +0x59c4bd) > #4 in CbcCutGenerator::generateCuts(OsiCuts&, int, OsiSolverInterface*, CbcNode*) at (engine/instdir/program/libCbc.so.3 +0x8281c) > #5 in CbcModel::serialCuts(OsiCuts&, CbcNode*, OsiCuts&, int) at (engine/instdir/program/libCbc.so.3 +0x3f3896) > #6 in CbcModel::solveWithCuts(OsiCuts&, int, CbcNode*) at (engine/instdir/program/libCbc.so.3 +0x35d61b) > #7 in CbcModel::branchAndBound(int) at (engine/instdir/program/libCbc.so.3 +0x33f172) > #8 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x215c37) > #9 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #10 in CbcOptimizeProblem at (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 (engine/instdir/program/libCgl.so.1 +0x142933) > #1 in CglGomory::generateCuts(OsiSolverInterface const&, OsiCuts&, CglTreeInfo) at (engine/instdir/program/libCgl.so.1 +0x1342e8) > #2 in CbcCutGenerator::generateCuts(OsiCuts&, int, OsiSolverInterface*, CbcNode*) at (engine/instdir/program/libCbc.so.3 +0x8281c) > #3 in CbcModel::serialCuts(OsiCuts&, CbcNode*, OsiCuts&, int) at (engine/instdir/program/libCbc.so.3 +0x3f3896) > #4 in CbcModel::solveWithCuts(OsiCuts&, int, CbcNode*) at (engine/instdir/program/libCbc.so.3 +0x35d61b) > #5 in CbcModel::branchAndBound(int) at (engine/instdir/program/libCbc.so.3 +0x33f172) > #6 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&) at (engine/instdir/program/libCbcSolver.so.3 +0x215c37) > #7 in CbcSolveProblem(void*, PROBLEMINFO*, OPTIONINFO*, int) at (engine/instdir/program/libCoinMP.so.1 +0x2c880) > #8 in CbcOptimizeProblem at (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 Change-Id: I8baaad0d3214da27cc85f76e267d4783dfae81e5 Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/4150 Tested-by: Jenkins CPCI Reviewed-by: Caolán McNamara (cherry picked from commit 85b26ba51a219795938c82288e38518d7f9aec5e) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/206638 Tested-by: Jenkins Reviewed-by: Xisco Fauli --- external/coinmp/ubsan.patch.0 | 170 ++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) diff --git a/external/coinmp/ubsan.patch.0 b/external/coinmp/ubsan.patch.0 index 157332986098..116dbca61a18 100644 --- a/external/coinmp/ubsan.patch.0 +++ b/external/coinmp/ubsan.patch.0 @@ -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 (numberActiveGenerators) ; ++ double smallProblem = numberActiveGenerators == 0 ? 0.0 : (0.2 * totalCuts) / ++ static_cast (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(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 (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 (total_deg) / (sp_numcols * (sp_numcols-1)); ++ fgraph.density = sp_numcols == 1 ? 0.0 : static_cast (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 ++#include + #include + #include + #include +@@ -1314,7 +1316,7 @@ + for (j=0; j (dxInt+0.5); ++ xInt[j]= static_cast (std::min(std::max(dxInt, std::numeric_limits::min()), std::numeric_limits::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 ++#include + #include + #include + #include +@@ -3905,7 +3907,7 @@ + } + } + int iUpper = static_cast (floor(upperValue+1.0e-5)); +- int iLower = static_cast (ceil(lowerValue-1.0e-5)); ++ int iLower = static_cast (ceil(std::min(std::max(lowerValue, std::numeric_limits::min()), std::numeric_limits::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 + #include + #include ++#include + #include + + #include "CoinPragma.hpp" +@@ -1718,8 +1719,8 @@ + } + if (allPlus) + nPossible++; +- int iUpper = static_cast (floor(upperValue+1.0e-5)); +- int iLower = static_cast (ceil(lowerValue-1.0e-5)); ++ int iUpper = static_cast (floor(std::min(std::max(upperValue, std::numeric_limits::min()), std::numeric_limits::max())+1.0e-5)); ++ int iLower = static_cast (ceil(std::min(std::max(lowerValue, std::numeric_limits::min()), std::numeric_limits::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 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_;