Fix #106040: pasting long text fails in Gnome-Shell/Wayland
Workaround gnome-shell including uninitialized memory when pasting from the clipboard. Where `read` would not write data into the range return by the length. Reading from the pipe into a power-of-two buffer works around the problem. It's not clear why this only impacts gnome-shell - as there is no significant down-side to changing the buffer size, apply a workaround. Ref !106091.
This commit is contained in:
parent
6caccf6b9f
commit
cb4f7cac24
@ -2016,7 +2016,13 @@ static char *read_file_as_buffer(const int fd, const bool nil_terminate, size_t
|
||||
{
|
||||
struct ByteChunk {
|
||||
ByteChunk *next;
|
||||
char data[4096 - sizeof(ByteChunk *)];
|
||||
/* NOTE(@ideasman42): On GNOME-SHELL-43.3, non powers of two values
|
||||
* (1023 or 4088 for e.g.) makes `read()` *intermittently* include uninitialized memory
|
||||
* (failing to read the end of the chunk) as well as truncating the end of the whole buffer.
|
||||
* The WAYLAND spec doesn't mention buffer-size so this may be a bug in GNOME-SHELL.
|
||||
* Whatever the case, using a power of two isn't a problem (besides some slop-space waste).
|
||||
* This workaround isn't necessary for KDE & WLROOTS based compositors, see: #106040. */
|
||||
char data[4096];
|
||||
};
|
||||
ByteChunk *chunk_first = nullptr, **chunk_link_p = &chunk_first;
|
||||
bool ok = true;
|
||||
|
Loading…
Reference in New Issue
Block a user