A client that downgrades to a 1.6 or 1.7 server parsed key repeat with the 1.8 format and swallowed the messages behind it. ServerProxy is now the 1.6 form with 1.7 and 1.8 subclasses picked by the negotiated version, mirroring the ClientProxy classes.
fixes: #10069fixes: #9483fixes: #9101
The 2021 language change put the string into the frozen 1.1 proxy, so every client below 1.8 (Barrier, Input Leap, Synergy 1.14.1 and older) disconnected on the first key repeat. Adds a test pinning the bytes each proxy version sends.
isAnyMouseButtonDown() always returned false, so the server never
considered the screen locked and could switch away mid-drag.
Track the pressed buttons in a bitset fed by the button events. There is
no way to poll them from libei, so drop the whole set whenever the state
stops being trustworthy: a paused device is reset to neutral by the EIS
side, a removed device sends nothing more, and releasing the input
capture ends the event stream. That rule now lives in updateButtons(),
which also puts EiScreen on the same resync path the other platforms
already use.
To be able to react to rules in screen->activate() that are enabled in setPrimaryClient, we have to reverse the order of the two calls. The same goes for screen->deactivate()
fixes: #10107
A malicious server can send a language synchronisation (LSYN) message
with a single-byte payload. size()-2 then underflows to SIZE_MAX and
substr(2, 2) throws std::out_of_range, terminating the client.
Reject odd-length payloads before mutating state, mirroring the
existing DSOP even-length check; an empty payload is still treated as
a normal clear.
some backends never report clipboard as enabled even when granted, so the retry looped forever; now it only retries once per role, then keeps the session.
most link-local IPs are just noise, but if an entire interface is link-local
only, maybe someone is hooking up their computers directly by ethernet cable
Still filter virtual interfacts with only local link