Reproduced using a standalone program linked against the official LinkKit 4.1 SDK, without any application engine code.
Environment
- Bundled LinkKit 4.1 XCFramework, arm64 Mac Catalyst slice.
- Apple Silicon, macOS 26.6.2; Xcode 26.3 (17C529).
- SDK source release: LinkKit-4.1, commit e1b85a3.
- Catalyst libLinkKit.a SHA-256: 9ff286e892ea8b4dc091a319a0b32f0f27c4847e07cd301b3aadb2693c70923a.
- No receiver is required for the capacity reproduction. Link is deactivated immediately after creation.
1. Reproduced: requested capacity shrinks
Using public APIs:
- Create an audio sink with maxNumSamples = 1024.
- Configure 48 kHz stereo, noninterleaved Float32 PCM with ABLLinkSetPropertiesFromASBD (framesPerPacket = 1).
- Read ABLLinkAudioSinkMaxNumSamples.
- Request 1024, then request the smaller value 512.
Actual output from the bundled binary:
initial maxSamples=1024
after stereo PCM ASBD maxSamples=2
after request1024 maxSamples=1024
after smaller request512 maxSamples=512
Expected: a smaller request should not reduce capacity. ABLLink.h explicitly documents a smaller request as a no-op. An ASBD describes the sample format; channels multiplied by framesPerPacket does not specify a render buffer's frame capacity for PCM.
ASBD helper source
2. Source/binary finding: sufficient capacity is rejected
ABLLinkCommitCoreAudioBufferWithBeats returns false when maxNumSamples() >= channels * numFrames. For 256 stereo frames (512 samples), both a requested capacity of 512 and 1024 take this rejection condition. The host-time helper delegates to the same function.
This condition is reversed relative to the capacity required for the copy. The bundled arm64 iOS and Catalyst code has the same unsigned greater-or-equal rejection branch. After that guard, the helper copies samples before final commit validation.
Exact source
Important limits: the probe's false send results are NOT proof of the guard defect, because no listener independently causes false. The comparison finding is established by source and disassembly, not a completed runtime branch trace. LLDB stalled during launch here. No active-receiver transmission test or buffer overrun was attempted, and no crash is claimed.
The ASBD capacity shrink can mask the reversed guard while previously allocated buffers remain larger. This report does not claim that every convenience send fails.
Reproduce
On an Apple Silicon Mac with Xcode installed:
zsh run.sh /absolute/path/to/LinkKit.xcframework
The script compiles only repro.mm against the shipped Catalyst binary, runs it, and removes its temporary executable. It does not modify the SDK or application.
Please check both the documented no-shrink contract and the Core Audio convenience helper's capacity check before conversion/copying.
Reproduced using a standalone program linked against the official LinkKit 4.1 SDK, without any application engine code.
Environment
1. Reproduced: requested capacity shrinks
Using public APIs:
Actual output from the bundled binary:
Expected: a smaller request should not reduce capacity. ABLLink.h explicitly documents a smaller request as a no-op. An ASBD describes the sample format; channels multiplied by framesPerPacket does not specify a render buffer's frame capacity for PCM.
ASBD helper source
2. Source/binary finding: sufficient capacity is rejected
ABLLinkCommitCoreAudioBufferWithBeats returns false when maxNumSamples() >= channels * numFrames. For 256 stereo frames (512 samples), both a requested capacity of 512 and 1024 take this rejection condition. The host-time helper delegates to the same function.
This condition is reversed relative to the capacity required for the copy. The bundled arm64 iOS and Catalyst code has the same unsigned greater-or-equal rejection branch. After that guard, the helper copies samples before final commit validation.
Exact source
Important limits: the probe's false send results are NOT proof of the guard defect, because no listener independently causes false. The comparison finding is established by source and disassembly, not a completed runtime branch trace. LLDB stalled during launch here. No active-receiver transmission test or buffer overrun was attempted, and no crash is claimed.
The ASBD capacity shrink can mask the reversed guard while previously allocated buffers remain larger. This report does not claim that every convenience send fails.
Reproduce
On an Apple Silicon Mac with Xcode installed:
The script compiles only repro.mm against the shipped Catalyst binary, runs it, and removes its temporary executable. It does not modify the SDK or application.
Please check both the documented no-shrink contract and the Core Audio convenience helper's capacity check before conversion/copying.