Fix incorrect data types in Python bindings of certain arrays.

The mismatch between the `py::array_t` template argument and the type of the MuJoCo struct member being wrapped caused the `py::array_t` to be constructed via an unintended constructor overload, which in turn triggered `use-after-poison` under asan.

This bug affected the `geom`, `flex`, `elem`, and `vert` arrays in `mjContact`, and all array members in `mjrContext`.

PiperOrigin-RevId: 608632860
Change-Id: Ic227f691041b004a0fcf0cb6fa3d62c44861d9aa
This commit is contained in:
Saran Tunyasuvunakool
2024-02-20 09:25:26 -08:00
committed by Copybara-Service
parent 7c534a066c
commit abf6d41b7f
4 changed files with 72 additions and 13 deletions
+6 -1
View File
@@ -14,6 +14,8 @@
#include <array>
#include <cstdint>
#include <optional>
#include <type_traits>
#include <Eigen/Core>
#include <mujoco/mjrender.h>
@@ -40,7 +42,10 @@ class MjWrapper<raw::MjrContext> : public WrapperBase<raw::MjrContext> {
void Free();
#define X(var) py_array_or_tuple_t<mjtNum> var
#define X(var) \
py_array_or_tuple_t< \
std::remove_all_extents_t<decltype(raw::MjrContext::var)>> \
var
X(fogRGBA);
X(auxWidth);
X(auxHeight);