diff --git a/src/engine/engine_io.c b/src/engine/engine_io.c
index 8d1ce4dd..cb7d61c6 100644
--- a/src/engine/engine_io.c
+++ b/src/engine/engine_io.c
@@ -1209,7 +1209,7 @@ void mj_deleteData(mjData* d) {
const int nPOS[4] = {7, 4, 1, 1};
const int nVEL[4] = {6, 3, 1, 1};
-static int sensorSize(mjtSensor sensor_type, int nuser_sensor) {
+static int sensorSize(mjtSensor sensor_type, int sensor_dim) {
switch (sensor_type) {
case mjSENS_TOUCH:
case mjSENS_RANGEFINDER:
@@ -1254,7 +1254,7 @@ static int sensorSize(mjtSensor sensor_type, int nuser_sensor) {
return 4;
case mjSENS_USER:
- return nuser_sensor;
+ return sensor_dim;
case mjSENS_PLUGIN:
return -1;
@@ -1593,7 +1593,7 @@ const char* mj_validateReferences(const mjModel* m) {
}
sensor_size = plugin->nsensordata(m, m->sensor_plugin[i], i);
} else {
- sensor_size = sensorSize(sensor_type, m->nuser_sensor);
+ sensor_size = sensorSize(sensor_type, m->sensor_dim[i]);
}
if (sensor_size < 0) {
return "Invalid model: Bad sensor_type.";
diff --git a/test/engine/engine_io_test.cc b/test/engine/engine_io_test.cc
index d555ef0f..e2a6c8da 100644
--- a/test/engine/engine_io_test.cc
+++ b/test/engine/engine_io_test.cc
@@ -434,6 +434,25 @@ TEST_F(ValidateReferencesTest, SensorsAddress) {
}
}
+TEST_F(ValidateReferencesTest, SensorsAddressUser) {
+ static const char xml[] = R"(
+
+
+
+
+
+
+
+ )";
+
+ std::array error;
+ mjModel* model = LoadModelFromString(xml, error.data(), error.size());
+ ASSERT_THAT(model, NotNull()) << "Failed to load model: " << error.data();
+
+ EXPECT_THAT(mj_validateReferences(model), IsNull());
+ mj_deleteModel(model);
+}
+
TEST_F(ValidateReferencesTest, SensorsObj) {
static const char xml[] = R"(