diff --git a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift index 3fe4ab77..069b1dc5 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift @@ -326,7 +326,7 @@ public typealias ActionBlock = () -> () let attributedString = NSMutableAttributedString(string: labelText, attributes: [NSAttributedString.Key.font: font.updateSize(standardFontSize), NSAttributedString.Key.foregroundColor: textColor as UIColor]) for attribute in attributes { - guard let range = validateAttribute(range: NSRange(location: attribute.location, length: attribute.length) , in: attributedString) + guard let range = validateAttribute(range: NSRange(location: attribute.location, length: attribute.length) , in: attributedString, type: attribute.type) else { continue } switch attribute { @@ -461,7 +461,7 @@ public typealias ActionBlock = () -> () guard let attributeType = attribute.optionalStringForKey(KeyType), let location = attribute["location"] as? Int, let length = attribute["length"] as? Int, - let range = validateAttribute(range: NSRange(location: location, length: length), in: attributedString) + let range = validateAttribute(range: NSRange(location: location, length: length), in: attributedString, type: attributeType) else { continue } switch attributeType { @@ -1001,15 +1001,15 @@ extension Label { // MARK: - Validations //------------------------------------------------------ -func validateAttribute(range: NSRange, in string: NSAttributedString) -> NSRange? { - guard range.location >= 0 && range.location < string.length else { +func validateAttribute(range: NSRange, in string: NSAttributedString, type: String = "") -> NSRange? { + guard range.location >= 0 && range.location <= string.length else { if let loggingHandler = MVMCoreLoggingHandler.shared(), loggingHandler.responds(to: #selector(MVMCoreLoggingHandler.addError(toLog:))) { loggingHandler.addError(toLog: MVMCoreErrorObject(title: nil, messageToLog: "Attribute starting location \(range.lowerBound) is out of bounds for '\(string.string)'. Attribute is discarded.", code: ErrorCode.default.rawValue, domain: ErrorDomainNative, location: "\(#file): \(#function)")!) } return nil } - if range.upperBound > string.length { + if type != "image" && range.upperBound > string.length { let newRange = NSRange(location: range.location, length: string.length - range.location) if let loggingHandler = MVMCoreLoggingHandler.shared(), loggingHandler.responds(to: #selector(MVMCoreLoggingHandler.addError(toLog:))) { loggingHandler.addError(toLog: MVMCoreErrorObject(title: nil, messageToLog: "Attribute ending location \(range.upperBound) is out of bounds for '\(string)'. Adjusting to \(newRange.upperBound).", code: ErrorCode.default.rawValue, domain: ErrorDomainNative, location: "\(#file): \(#function)")!)