ProcessCommand chose the MSG record size by testing "ulLength % 28 == 0" before "% 48 == 0". The two sizes' least common multiple is 336 (7*48 = 12*28), so a 48-byte batch whose record count is a multiple of 7 was misclassified as 28-byte MSG32 records, shifting every field and garbling (or silently dropping) injected input. Check "% 48 == 0" first. The modern controller always emits 48-byte MSG64; the 28-byte MSG32 path is legacy 32-bit-controller compatibility and is only reached when 48 does not divide evenly. This is the first feature (MCP remote_keyboard "type", and the upcoming remote_mouse drag) to emit multi-record batches, which is what made the latent bug reachable. Co-Authored-By: deepseek-v4-pro
111 KiB
111 KiB