diff --git a/java_console/models/src/main/java/com/rusefi/core/ISensorHolder.java b/java_console/models/src/main/java/com/rusefi/core/ISensorHolder.java index 53e4596cfe..3e18143201 100644 --- a/java_console/models/src/main/java/com/rusefi/core/ISensorHolder.java +++ b/java_console/models/src/main/java/com/rusefi/core/ISensorHolder.java @@ -1,5 +1,6 @@ package com.rusefi.core; +import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; @@ -11,7 +12,12 @@ public interface ISensorHolder { continue; } - ByteBuffer bb = ByteBuffer.wrap(response, 1 + sensor.getOffset(), 4); + int offset = 1 + sensor.getOffset(); + int size = 4; + if (offset + size > response.length) { + throw new IllegalArgumentException(sensor + String.format(" but %d+%d in %d", offset, size, response.length)); + } + ByteBuffer bb = ByteBuffer.wrap(response, offset, size); bb.order(ByteOrder.LITTLE_ENDIAN); double rawValue = sensor.getValueForChannel(bb); diff --git a/java_console/models/src/main/java/com/rusefi/core/Sensor.java b/java_console/models/src/main/java/com/rusefi/core/Sensor.java index f0e21d5e76..e9005b902c 100644 --- a/java_console/models/src/main/java/com/rusefi/core/Sensor.java +++ b/java_console/models/src/main/java/com/rusefi/core/Sensor.java @@ -17,6 +17,7 @@ import static com.rusefi.config.generated.Fields.*; /** * @author Andrey Belomutskiy * 2/11/13 + * @see Fields#TS_OUTPUT_SIZE */ public enum Sensor { /** diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java index e514e614c1..fd17000566 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java @@ -122,6 +122,8 @@ public class ControllerConnectionState { outputRoundAroundDuration = (int) (System.currentTimeMillis() - start); if (packet == null) throw new IOException("getOutputs: No response"); + if (packet.length != 1 + Fields.TS_OUTPUT_SIZE) + throw new IOException("getOutputs: unexpected package length " + packet.length); sensorsHolder.grabSensorValues(packet); }