T183626616 - [KP][WP iOS v] App crashes after rotation in landscape view during playing a video. (#45846)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45846

In general this diff fixes all crashes related to RTCImageUtills happened because of uncovered cases in switch.

In this current bug the problem was in this part of code
RCTTargetSize(imageSize, imageScale, frame.size, RCTScreenScale(), (RCTResizeMode)self.contentMode, YES);

when we cast UIViewContentMode to RCTResizeMode. RCTResizeMode doesnt cover all of UIViewContentMode values.

So just added default cases to swithces in places where it was lost.

Changelog:
[iOS][Fixed] - fixed crash in RCTImageUtils

Reviewed By: philIip

Differential Revision: D60523540

fbshipit-source-id: b8027537c600a7ca226e62238d16a6b05301d4de
This commit is contained in:
Pavel Gurkovskii
2024-08-06 02:07:47 -07:00
committed by Facebook GitHub Bot
parent 67367a0bba
commit 3572ef3f1b
2 changed files with 30 additions and 2 deletions
@@ -447,8 +447,8 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithFrame : (CGRect)frame)
} else if ([self shouldReloadImageSourceAfterResize]) {
CGSize imageSize = self.image.size;
CGFloat imageScale = self.image.scale;
CGSize idealSize =
RCTTargetSize(imageSize, imageScale, frame.size, RCTScreenScale(), (RCTResizeMode)self.contentMode, YES);
CGSize idealSize = RCTTargetSize(
imageSize, imageScale, frame.size, RCTScreenScale(), RCTResizeModeFromUIViewContentMode(self.contentMode), YES);
// Don't reload if the current image or target image size is close enough
if (!RCTShouldReloadImageForSizeChange(imageSize, idealSize) ||
@@ -15,6 +15,34 @@ typedef NS_ENUM(NSInteger, RCTResizeMode) {
RCTResizeModeRepeat = -1, // Use negative values to avoid conflicts with iOS enum values.
};
static inline RCTResizeMode RCTResizeModeFromUIViewContentMode(UIViewContentMode mode)
{
switch (mode) {
case UIViewContentModeScaleToFill:
return RCTResizeModeStretch;
break;
case UIViewContentModeScaleAspectFit:
return RCTResizeModeContain;
break;
case UIViewContentModeScaleAspectFill:
return RCTResizeModeCover;
break;
case UIViewContentModeCenter:
return RCTResizeModeCenter;
break;
case UIViewContentModeRedraw:
case UIViewContentModeTop:
case UIViewContentModeBottom:
case UIViewContentModeLeft:
case UIViewContentModeRight:
case UIViewContentModeTopLeft:
case UIViewContentModeTopRight:
case UIViewContentModeBottomLeft:
case UIViewContentModeBottomRight:
return RCTResizeModeRepeat;
}
};
@interface RCTConvert (RCTResizeMode)
+ (RCTResizeMode)RCTResizeMode:(id)json;