From 44816adce634c8a06c1ff0591adbcf042ec4c072 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Sun, 20 Oct 2019 20:50:23 +0200 Subject: [PATCH] Be careful before using buffer parameters in colAlign Make InsetGrid::colAlign a normal method and make it check whether buffer is valid before using it. This avoids crashes as we have seen in 2.3.3 (see e.g. #11686). There is still an assertion so that failure is noticeable before release. --- src/mathed/InsetMathGrid.cpp | 12 +++++++----- src/mathed/InsetMathGrid.h | 2 +- src/mathed/InsetMathHull.cpp | 4 ++-- src/mathed/InsetMathSplit.cpp | 4 ++-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp index 910450d378..34fb53dcee 100644 --- a/src/mathed/InsetMathGrid.cpp +++ b/src/mathed/InsetMathGrid.cpp @@ -1831,8 +1831,7 @@ bool InsetMathGrid::getStatus(Cursor & cur, FuncRequest const & cmd, } -// static -char InsetMathGrid::colAlign(HullType type, col_type col, BufferParams const & bp) +char InsetMathGrid::colAlign(HullType type, col_type col) const { switch (type) { case hullEqnArray: @@ -1841,10 +1840,13 @@ char InsetMathGrid::colAlign(HullType type, col_type col, BufferParams const & b case hullMultline: return 'c'; case hullGather: - if (!bp.is_math_indent) - return 'c'; - else + LASSERT(isBufferValid(), + LYXERR0("Buffer not set correctly. Please report!"); + return 'c';); + if (buffer().params().is_math_indent) return 'l'; + else + return 'c'; case hullAlign: case hullAlignAt: diff --git a/src/mathed/InsetMathGrid.h b/src/mathed/InsetMathGrid.h index b6d8044057..425a98a324 100644 --- a/src/mathed/InsetMathGrid.h +++ b/src/mathed/InsetMathGrid.h @@ -272,7 +272,7 @@ protected: // InsetMathSplit. /// The value of a fixed col align for a certain hull type (can /// depend on the "indent math" setting). - static char colAlign(HullType type, col_type col, BufferParams const &); + char colAlign(HullType type, col_type col) const; /// The value of a fixed col spacing for a certain hull type static int colSpace(HullType type, col_type col); diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp index 261f7f27bb..7da33199c6 100644 --- a/src/mathed/InsetMathHull.cpp +++ b/src/mathed/InsetMathHull.cpp @@ -430,7 +430,7 @@ InsetMath::mode_type InsetMathHull::currentMode() const // alignment is not implemented in the LyXHTML output. char InsetMathHull::defaultColAlign(col_type col) { - return colAlign(type_, col, buffer().params()); + return colAlign(type_, col); } @@ -452,7 +452,7 @@ char InsetMathHull::displayColAlign(idx_type idx) const case hullXAlignAt: case hullXXAlignAt: case hullFlAlign: - return colAlign(type_, col(idx), buffer().params()); + return colAlign(type_, col(idx)); default: break; } diff --git a/src/mathed/InsetMathSplit.cpp b/src/mathed/InsetMathSplit.cpp index 200a0bc3c9..ebc8162dd9 100644 --- a/src/mathed/InsetMathSplit.cpp +++ b/src/mathed/InsetMathSplit.cpp @@ -62,7 +62,7 @@ char InsetMathSplit::defaultColAlign(col_type col) || name_ == "aligned" || name_ == "align" || name_ == "alignedat") - return colAlign(hullAlign, col, buffer().params()); + return colAlign(hullAlign, col); return 'l'; } @@ -79,7 +79,7 @@ char InsetMathSplit::displayColAlign(idx_type idx) const || name_ == "aligned" || name_ == "align" || name_ == "alignedat") - return colAlign(hullAlign, col(idx), buffer().params()); + return colAlign(hullAlign, col(idx)); return InsetMathGrid::displayColAlign(idx); } -- 2.39.2