diff --git a/changelog.md b/changelog.md index 95d5399c42..f4646c918b 100644 --- a/changelog.md +++ b/changelog.md @@ -47,6 +47,7 @@ * Fixed: Missing null check for Blood Magic integration. * Fixed: [#3336] Missing null check for GregTech data stick NBTs. * Fixed: [#3249] NullPointerException when remote terminal is missing. +* Fixed: Potential edge case crash with the Tank Controller Upgrade. * Fixed: [#3401] 'rawSetForeground', 'rawSetBackground' not working correctly. * Fixed: [#3265] Relay 'setStrength' unlimited upper bound. (JamesOrdner) * (1.7.10) Fixed: [#3540] Server-side crash with Motion Sensor diff --git a/src/main/scala/li/cil/oc/server/component/traits/WorldTankAnalytics.scala b/src/main/scala/li/cil/oc/server/component/traits/WorldTankAnalytics.scala index 7a8a9ccbce..5a19533271 100644 --- a/src/main/scala/li/cil/oc/server/component/traits/WorldTankAnalytics.scala +++ b/src/main/scala/li/cil/oc/server/component/traits/WorldTankAnalytics.scala @@ -52,7 +52,10 @@ trait WorldTankAnalytics extends WorldAware with SideRestricted { def getTankCount(context: Context, args: Arguments): Array[AnyRef] = { val facing = checkSideForAction(args, 0) FluidUtils.fluidHandlerAt(position.offset(facing)) match { - case Some(handler) => result(handler.getTankInfo(facing.getOpposite).length) + case Some(handler) => handler.getTankInfo(facing.getOpposite) match { + case info: Array[FluidTankInfo] => result(info.length) + case _ => result(Unit, "no tank") + } case _ => result(Unit, "no tank") } } diff --git a/src/main/scala/li/cil/oc/util/ExtendedArguments.scala b/src/main/scala/li/cil/oc/util/ExtendedArguments.scala index b66da39197..5cfb32c74d 100644 --- a/src/main/scala/li/cil/oc/util/ExtendedArguments.scala +++ b/src/main/scala/li/cil/oc/util/ExtendedArguments.scala @@ -46,10 +46,11 @@ object ExtendedArguments { def checkTankInfo(handler: IFluidHandler, side: ForgeDirection, n: Int) = { val tank = args.checkInteger(n) - 1 - if (tank < 0 || tank >= handler.getTankInfo(side).length) { + val tankInfo = handler.getTankInfo(side) + if (tankInfo == null || tank < 0 || tank >= tankInfo.length) { throw new IllegalArgumentException("invalid tank index") } - handler.getTankInfo(side)(tank) + tankInfo(tank) } def optTankInfo(handler: IFluidHandler, side: ForgeDirection, n: Int, default: FluidTankInfo) = {