oliviertassinari / react-swipeable-views

A React component for swipeable views. :snowflake:
https://react-swipeable-views.com/
MIT License
4.46k stars 480 forks source link

checkIndexBounds off by 1 validation #650

Open davidnx opened 3 years ago

davidnx commented 3 years ago

checkIndexBounds is too lenient and allows setting indexes from 0 .. count inclusive, whereas really the only valid values are 0 .. (count-1).

https://github.com/oliviertassinari/react-swipeable-views/blob/a12dd90f63372162bd461f293be1c240fe872ef0/packages/react-swipeable-views-core/src/checkIndexBounds.js#L9-L12

Current Behavior

The warning is only produced after setting index to children.length + 1:

Here is an example warning I see when I set index = 4 having only 3 children:

Warning: react-swipeable-view: the new index: 4 is out of bounds: [0-3].

Expected Behavior

Setting index to exactly children.length should already produce a warning. The warning message should also show the correct range of values.

E.g. setting index to 3 should produce this warning when there are only 3 children:

Warning: react-swipeable-view: the new index: 3 is out of bounds: [0-2].

Steps to Reproduce

This should produce a warning, but it doesn't:

<SwipeableViews index={3}>
  <div>A</div>
  <div>B</div>
  <div>C</div>
</SwipeableViews>

Context

This is a minor dev nuisance, where the lenience of react-swipable-views is potentially allowing a dev to not detect code defects.

Your Environment

Tech Version
react-swipeable-views 0.14.0
React 17.0.2
platform Web