Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix RangeError if estimatedSize={0} #1218

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

Conversation

usrbowe
Copy link

@usrbowe usrbowe commented May 30, 2024

Description

If the estimatedSize is set to 0 (could be by accident or before the final value is calculated), the FlashList would throw

RangeError: Array size is not a small enough positive integer.

Root cause code:

const estimatedItemCount = Math.max(
3,
Math.round(
(this.props.horizontal
? renderWindowSize.width
: renderWindowSize.height) /
(this.props.estimatedItemSize ?? this.defaultEstimatedItemSize)
)
);

The error is due to the using ?? instead of ||, so the estimatedItemCount would divide the renderWindowSize with 0. Then the value of estimatedItemCount would be Infinity.

This value is later passed to new instance of AverageWindow as size as Infinity.

The actual error is thrown from this line:

export class AverageWindow {
private currentAverage: number;
private currentCount: number;
private inputValues: (number | undefined)[];
private nextIndex = 0;
constructor(size: number, startValue?: number) {
this.inputValues = new Array<number>(Math.max(1, size));

Creating new Array(Math.max(1, Infinity)) would throw the RangeError.

Reviewers’ hat-rack 🎩

  • [ ]

Screenshots or videos (if needed)

Checklist

@usrbowe
Copy link
Author

usrbowe commented May 30, 2024

I have signed the CLA!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant