coin-or / Cbc.old

This is a mirror of the subversion repository on COIN-OR
https://projects.coin-or.org/Cbc
Other
89 stars 30 forks source link

[Trac #121] Problem in CoinFactorization::pivotOneOtherRow when adding a constraint that contains a variable more than once #83

Open s-c-e opened 5 years ago

s-c-e commented 5 years ago

image

(I posted this on the mailing list before)

$ cat test.cc
#include <coin/OsiClpSolverInterface.hpp>
#include <coin/CbcModel.hpp>

int main() {
  CbcModel model = CbcModel(OsiClpSolverInterface());
  model.solver()->readLp("/dev/stdin");
  model.branchAndBound();
  return 0;
}

$ cat crash3.lp                                                                                                                                                                          
\Problem name: 

Minimize
obj: - x0
Subject To
cons0:  x0 + x0 <= 1
cons1:  x1 <= 1
Bounds
End

$ g++ -g -O3 -W -Wall -I /home/hueffner/opt/cbc-2.7/include test.cc -L/home/hueffner/opt/cbc-2.7/lib -lCbc -lCbcSolver -lCgl -lClp -lCoinUtils -lOsiClp -lOsi -lz -lrt && ./a.out < crash3.lp
Cbc3007W No integer variables - nothing to do
Clp0006I 0  Obj 0 Dual inf 0.9999999 (1)
Clp0006I 0  Obj 0 Dual inf 0.9999999 (1)
zsh: segmentation fault  ./a.out < crash3.lp

This is with cbc 2.7 from svn. The segfault sometimes disappears
depending on surrounding code. valgrind reports an invalid read in
CoinFactorization::pivotOneOtherRow. With 2.5.0, I get:

Cbc3007W No integer variables - nothing to do
Clp0006I 0  Obj 0 Dual inf 1 (1)
a.out: CoinFactorization1.cpp:2108: bool CoinFactorization::pivotOneOtherRow(int, int): Assertion `where < end' failed.
zsh: abort      ./a.out < crash3.lp

Maybe this is not a valid .lp file, but cbc probably shouldn't crash.