From e2d602f1588ee7a0c8dfc8058a7e0d73da6165b1 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 1 Sep 2026 14:06:09 -0500 Subject: [PATCH] Pin PSLP past v0.0.11 to fix a stray infeasible-message printf run_presolver() prints "PSLP declares problem as infeasible[.| or unbounded.]" unconditionally, unlike every other console message in that function, which are all gated on stgs->verbose. cuOpt sets verbose = false when calling PSLP (third_party_presolve.cpp) specifically to keep it silent, so this writes unexpectedly straight to the process's native stdout. Found and confirmed via a captured Surefire dumpstream while investigating the Java bindings' "Corrupted channel" crash (see NVIDIA/cuopt#1818): a raw native write there bypasses System.out and corrupts Maven Surefire's forked-JVM protocol, which also uses stdout as its own channel. The infeasible/unbounded status itself is unaffected -- it already flows back to the caller through run_presolver()'s typed return value, not by parsing this printed text. Filed and fixed upstream: https://github.com/dance858/PSLP/pull/55. Pin past v0.0.11 to the merge commit until a release containing it is available. --- cpp/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index f7e89952c2..3d41ca01e0 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -292,10 +292,13 @@ FetchContent_MakeAvailable(papilo) # PSLP - Lightweight C presolver for linear programs # https://github.com/dance858/PSLP +# +# Pinned past v0.0.11 to a commit rather than a tag: fixes a stray infeasible-message printf +# that ignored verbose=false (dance858/PSLP#55). Move to a released tag once one includes it. FetchContent_Declare( pslp GIT_REPOSITORY "https://github.com/dance858/PSLP.git" - GIT_TAG "v0.0.11" + GIT_TAG "12d37dd9ab5ee848b3ec5da17f4cf8e805d58cd6" GIT_PROGRESS TRUE EXCLUDE_FROM_ALL SYSTEM