Skip to content
This repository was archived by the owner on Jun 19, 2025. It is now read-only.

Commit 05cb266

Browse files
authored
Merge pull request #424 from wordpress-mobile/issue/423-prevent-index-overflows
Issue/423 prevent index overflows
2 parents 759b819 + 221e3b1 commit 05cb266

File tree

4 files changed

+22
-8
lines changed

4 files changed

+22
-8
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ _None._
4848

4949
_None._
5050

51+
## 1.8.12
52+
53+
### Bug Fixes
54+
55+
- Prevent crash when unexpected indexes received in a PHAsset changeset [#423]
56+
5157
## 1.8.11
5258

5359
### Bug Fixes

Example/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
PODS:
2-
- WPMediaPicker (1.8.11)
2+
- WPMediaPicker (1.8.12)
33

44
DEPENDENCIES:
55
- WPMediaPicker (from `../`)
@@ -9,7 +9,7 @@ EXTERNAL SOURCES:
99
:path: "../"
1010

1111
SPEC CHECKSUMS:
12-
WPMediaPicker: 79548964e9c7e131ccfa72270bdda3aec8fa56b5
12+
WPMediaPicker: e9eaa804e1b0288d7969776608053ae0ea2941f2
1313

1414
PODFILE CHECKSUM: 31590cb12765a73c9da27d6ea5b8b127c095d71d
1515

Pod/Classes/WPPHAssetDataSource.m

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,9 @@ - (void)photoLibraryDidChange:(PHChange *)changeInstance
9797
BOOL incrementalChanges = assetsChangeDetails.hasIncrementalChanges;
9898
// Capture removed, changed, and moved indexes before fetching results for incremental chaanges.
9999
// The adjustedIndex depends on the *old* asset count.
100-
NSIndexSet *removedIndexes = [self adjustedIndexesForIndexSet:assetsChangeDetails.removedIndexes];
101-
NSIndexSet *changedIndexes = [self adjustedIndexesForIndexSet:assetsChangeDetails.changedIndexes];
100+
NSInteger oldCount = assetsChangeDetails.fetchResultBeforeChanges.count;
101+
NSIndexSet *removedIndexes = [self adjustedIndexesForIndexSet:assetsChangeDetails.removedIndexes forCount:oldCount];
102+
NSIndexSet *changedIndexes = [self adjustedIndexesForIndexSet:assetsChangeDetails.changedIndexes forCount:oldCount];
102103
NSMutableArray *moves = [NSMutableArray array];
103104
if (assetsChangeDetails.hasMoves) {
104105
[assetsChangeDetails enumerateMovesWithBlock:^(NSUInteger fromIndex, NSUInteger toIndex) {
@@ -360,7 +361,11 @@ - (NSInteger)adjustedIndexForIndex:(NSInteger)index forCount:(NSInteger)count
360361
// Adjust the index so items are returned in reverse order.
361362
// We do this, rather than specifying the sort order in PHFetchOptions,
362363
// to preserve the sort order of assets in the Photos app (only in reverse).
363-
return (count - 1) - index;
364+
if (index < count) {
365+
return (count - 1) - index;
366+
} else {
367+
@throw NSRangeException;
368+
}
364369
}
365370

366371
- (NSIndexSet *)adjustedIndexesForIndexSet:(NSIndexSet *)indexes
@@ -373,8 +378,11 @@ - (NSIndexSet *)adjustedIndexesForIndexSet:(NSIndexSet *)indexes forCount:(NSInt
373378
{
374379
NSMutableIndexSet *adjustedSet = [NSMutableIndexSet new];
375380
[indexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) {
376-
if (idx != NSNotFound) {
377-
[adjustedSet addIndex:[self adjustedIndexForIndex:idx forCount: count]];
381+
if (idx < count) {
382+
NSInteger adjustedIndex = [self adjustedIndexForIndex:idx forCount: count];
383+
if (adjustedIndex < NSNotFound) {
384+
[adjustedSet addIndex:adjustedIndex];
385+
}
378386
}
379387
}];
380388

WPMediaPicker.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Pod::Spec.new do |s|
44
s.name = 'WPMediaPicker'
5-
s.version = '1.8.11'
5+
s.version = '1.8.12'
66

77
s.summary = 'WPMediaPicker is an iOS controller that allows capture and picking of media assets.'
88
s.description = <<-DESC

0 commit comments

Comments
 (0)