Description

TArray64 RangeCheck prints the incorrect error messages for values over 32 bit.

Repro Rate: 4/4

Tested this in //UE4/Release-4.27 @ CL#18319896 and the issue did occur there, it is not a regression.

Assertion failed: (Index >= 0) & (Index < ArrayNum) [File:E:\Binary\UE_5.0\Engine\Source\Runtime\Core\Public\Containers\Array.h] [Line: 691] Array index out of bounds: -2 from an array of size -2
Steps to Reproduce
  1. Create a new blank C++ project
  2. Create a new C++ class based on Actor
  3. In 'MyActor.cpp' add the following code below Super::BeginPlay():
    • 	TArray64<int> arr;
      	int64 len = (int64)INT_MAX + (int64)INT_MAX; // Length of the array will be 4,294,967,294 as INT_MAX = 2,147,483,647
      	arr.AddZeroed(len);
      	UE_LOG(LogTemp, Warning, TEXT("ARR LENGTH: % lld"), arr.Num()); // Print out the length of the array
      	UE_LOG(LogTemp, Warning, TEXT("last+1 value is %lld"), arr[len]); // Purposefully access an index out of bounds.
    • We're filling TArray64 with zeros up to the length of 4294967294 (INT_MAX + INT_MAX)
  4. Recompile the project and place MyActor into the scene.
  5. Play in Editor

Results: Intended assertion occurs with the incorrect index and size of the array (Array index out of bounds: -2 from an array of size -2)
Expected: Intended assertion occurs with the correct values of the index and size of the array (Array index out of bounds: 4294967294 from an array of size 4294967294)

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-150458 in the post.

0
Login to Vote

Fixed
ComponentUE - Foundation - Core
Affects Versions4.275.0
Target Fix5.1
Fix Commit19958994
Main Commit19958994
CreatedApr 27, 2022
ResolvedApr 28, 2022
UpdatedMay 6, 2022