[Cbc] Problem in CoinFactorization::pivotOneOtherRow when adding a constraint that contains a variable more than once

Falk Hueffner falk at debian.org
Tue Nov 15 09:12:09 EST 2011


Hi,

as the subject says:

$ 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.

  Falk



More information about the Cbc mailing list