diff options
author | Chris Robinson <[email protected]> | 2022-05-07 07:58:48 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2022-05-07 08:49:02 -0700 |
commit | 96756acc5249a6b7e733b3098c7dca37fcf847cb (patch) | |
tree | 6a30c9ce27e2a1ce98c9f05ed8fd6a2bb89edd10 /core/mastering.cpp | |
parent | 10e863d1b4c29829110d4f8c2d3ca934b8c274bc (diff) |
Reject older versions of PipeWire than built against
Newer versions of PipeWire may add things to public structures. For example,
pw_buffer::requested added in 0.3.49. Building against 0.3.49 or newer, but
then running with 0.3.48 could result in invalid accesses since the returned
pw_buffer objects are shorter than the definition says to expect, creating
undefined behavior. Even if explicit access to the additional fields is
protected by a runtime check, the language allows the compiler to assume a
pointer to a pw_buffer object contains a complete pw_buffer, allowing the
optimizer to access the field earlier than the check (with the check only
controlling if the value gets used).
Another example is pw_time, which had a few fields added in 0.3.50 along with a
function, pw_stream_get_time_n, that provides the size of the pw_time struct
the application is using (so the library knows what version of the struct it
has to fill in). If a later version adds a new field, running it with an older
version will either fail (due to the library getting a size larger than it
knows about) or silently leave the newer fields as garbage.
Diffstat (limited to 'core/mastering.cpp')
0 files changed, 0 insertions, 0 deletions