Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: AvaloniaUI/Avalonia
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 11.3.19
Choose a base ref
...
head repository: AvaloniaUI/Avalonia
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 11.3.20
Choose a head ref
  • 2 commits
  • 3 files changed
  • 2 contributors

Commits on Aug 10, 2026

  1. fix(macos): correct NSTextInputClient range and out parameter handling (

    #21885)
    
    attributedSubstringForProposedRange:actualRange: read *actualRange on
    entry and used it as the proposed range. actualRange is an out parameter
    and is uninitialized on entry, so the substring was taken from an
    arbitrary range. It also never wrote the out parameter. It now intersects
    the requested range with the document and writes the result, or
    {NSNotFound, 0} when the intersection is empty.
    
    The same class of issue affected the rest of the protocol implementation:
    
    - firstRectForCharacterRange:actualRange: never wrote actualRange, and
      dereferenced the parent without a null check.
    - unmarkText dereferenced the parent without a null check.
    - selectedRange and setSelection:: passed the managed selection through
      unclamped, so a stale or reversed selection produced a range past the
      end of the document, which AppKit then fed back into the substring
      call. Reversed pairs are now swapped and both ends clamped.
    - markedRange returned {selectionLocation, 0} instead of the documented
      {NSNotFound, 0} when there is no marked text.
    - The replacement ranges in setMarkedText:selectedRange:replacementRange:
      and insertText:replacementRange: are clamped before being passed to
      SelectInSurroundingText.
    - setText: re-clamps the stored ranges, as replacing the document can
      strand them out of bounds.
    
    Nil strings and nil UTF8String results are no longer passed across the
    COM boundary, and SetSurroundingText no longer calls
    stringWithUTF8String: on a null pointer.
    Gillibald authored and MrJul committed Aug 10, 2026
    Configuration menu
    Copy the full SHA
    401db93 View commit details
    Browse the repository at this point in the history
  2. Version 11.3.20

    MrJul committed Aug 10, 2026
    Configuration menu
    Copy the full SHA
    984c3b8 View commit details
    Browse the repository at this point in the history
Loading