btCylinderShape's constructor takes a btVector3 instead of a btVector2 (it's really just a 2-parameter shape, radius & height), and this causes a problem in the AABB code where it calls getHalfExtentsWithoutMargin()
void btCylinderShape::getAabb(const btTransform& t,btVector3& aabbMin,btVector3& aabbMax) const
{
btTransformAabb(getHalfExtentsWithoutMargin(),getMargin(),t,aabbMin,aabbMax);
}
the default btCylinderShape is y-axis-oriented, and btCylinderShape::calculateLocalInertia() correctly ignores the Z parameter , but the getAabb incorrectly uses it in getHalfExtentsWithoutMargin.
Instead it should replicate the x-radius value to the z value, or just change the constructor api so it passes 2 half-extent params instead of a confusing should-be-ignored 3rd one.