[BUG] "ComposeTransform" completely broken in 4.17 and 4.18

A very simple example. A.transform * B.transform does not work correctly.

error in calculating the quaternion of rotation

absolutely the same thing happens if the function is written in C ++:

TArray<FTransform> UBaseLibraryBPLibrary::BindChainToParent(const TArray<FTransform> InT, const FTransform parent)
{
	TArray<FTransform> Out;

	for (int I = 0; I < InT.Num(); I++)
	{
		if (I == 0)
		{
			Out.Add(InT[I] * parent);
		}
		else
		{
			Out.Add(InT[I] * Out[I - 1]);
		}
	}

	return Out;
}

in my opinion this is a critical bug.
[project][4]

it looks like a typical Gimbal lock error,
which should not arise because the transformation must take place without the participation of Eluer angles.

I would like to receive a comment on this error from UE4 staff.
is this behavior a bug? will this bug be fixed?

Hey -

I’m looking at the sample project you provided and I wanted to confirm the behavior you’re reporting. Are you referring to positions of the blue/green lines shown in the gif? Can you explain what you feel the expected behavior should be?

the position of the TArray depends on the position of the first bone,
and must be constantly relative to the first bone.
, but the rotator at certain positions in the world does not work and gets off to zero.

t looks like FTransform * FTransform returns a non-normalized rotator (by design?),
because there is no error with this code:

TArray<FTransform> UMyBlueprintFunctionLibrary::BindChainToParent(const TArray<FTransform> & InT, const FTransform& parent)
{
	TArray<FTransform> Out;
    FTransform t;
	for (int I = 0; I < InT.Num(); I++)
	{
		
		if (I == 0)
		{
			t = (InT[I] * parent);
			t.NormalizeRotation();
			Out.Add(t);
		}
		else
		{
			t = InT[I] * Out[I - 1];
			t.NormalizeRotation();
			Out.Add(t);
		}
	}

	return Out;
}