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);
}
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.
The method
DimensionallyDependentLayer.getDataValueByPosition()
does not check the return values of the calls toLayerUtil.convertColumnPosition()
andLayerUtil.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:
One possible fix: