eclipse-nattable / nattable

High performance SWT data grid
https://eclipse.dev/nattable/
Eclipse Public License 2.0
11 stars 6 forks source link

DimensionallyDependentLayer.getDataValueByPosition() does not check for failed coord conversion, leading to exception #93

Open thomasa299792 opened 3 weeks ago

thomasa299792 commented 3 weeks ago

The method DimensionallyDependentLayer.getDataValueByPosition() does not check the return values of the calls to LayerUtil.convertColumnPosition() and LayerUtil.convertRowPosition().

Consequently, it can pass -1 for one or both coordinates to this.baseLayer.getDataValueByPosition(), which leads to an exception.

Observed in 2.0.5, but see the same code in 2.4.0.

Current code:

    @Override
    public Object getDataValueByPosition(int columnPosition, int rowPosition) {
        int baseColumnPosition = LayerUtil.convertColumnPosition(this, columnPosition, this.baseLayer);
        int baseRowPosition = LayerUtil.convertRowPosition(this, rowPosition, this.baseLayer);
        return this.baseLayer.getDataValueByPosition(baseColumnPosition, baseRowPosition);
    }

One possible fix:

        public Object getDataValueByPosition(int columnPosition, int rowPosition) {
                int baseColumnPosition = LayerUtil.convertColumnPosition(this, columnPosition, this.baseLayer);
                int baseRowPosition = LayerUtil.convertRowPosition(this, rowPosition, this.baseLayer);

            return ( (baseColumnPosition < 0) || (baseRowPosition < 0))
                ? null
                : this.baseLayer.getDataValueByPosition(baseColumnPosition, baseRowPosition);
        }
fipro78 commented 3 weeks ago

Do you have an example when this happens? I agree from just looking at the code. But it did never occur before. And if it did, it revealed an issue with the composition.