diff options
author | Ulrich Sibiller <uli42@gmx.de> | 2019-05-27 15:42:11 +0200 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2019-06-11 11:32:55 +0200 |
commit | a736122f5712d5d1b3b798ace3583a101c0cdf61 (patch) | |
tree | 9f7c067d73c4eb4044407d26df0416f29ae082fa | |
parent | 49adb1e5ccf6cd5da186a6ca10bfb6e8048b4be4 (diff) | |
download | nx-libs-a736122f5712d5d1b3b798ace3583a101c0cdf61.tar.gz nx-libs-a736122f5712d5d1b3b798ace3583a101c0cdf61.tar.bz2 nx-libs-a736122f5712d5d1b3b798ace3583a101c0cdf61.zip |
os: fix BigReq ignoring when another request is pending
Not sure how it came to this situation, but the following commit is
partly contained in our version of the code. Some lines had not been
removed, tough...
commit c80c41767eb101e9dbd8393d8cca7764b4e248a4
Author: Aaron Plattner <aplattner@nvidia.com>
Date: Mon Oct 25 22:01:32 2010 -0700
os: Fix BigReq ignoring when another request is pending
Commit cf88363db0ebb42df7cc286b85d30d7898aea840 fixed the handling of
BigReq requests that are way too large and handles the case where the
read() syscall returns a short read. However, it neglected to handle
the case where it returns a long read, which happens when the client
has another request in the queue after the bogus large one.
Handle the long read case by subtracting the smaller of 'needed' and
'gotnow' from oci->ignoreBytes. If needed < gotnow, simply subtract
the two, leaving gotnow equal to the number of extra bytes read.
Since the code immediately following the (oci->ignoreBytes > 0) block
tries to handle the next request, advance oci->bufptr immediately
instead of setting oci->lenLastReq and letting the next call to
ReadRequestFromClient do it.
Fixes the XTS pChangeKeyboardMapping-3 test.
CASES TESTS PASS UNSUP UNTST NOTIU WARN FIP FAIL UNRES UNIN ABORT
-Xproto 122 389 367 2 19 0 0 0 1 0 0 0
+Xproto 122 389 368 2 19 0 0 0 0 0 0 0
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | nx-X11/programs/Xserver/os/io.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/nx-X11/programs/Xserver/os/io.c b/nx-X11/programs/Xserver/os/io.c index ad1fdcd20..02a47f135 100644 --- a/nx-X11/programs/Xserver/os/io.c +++ b/nx-X11/programs/Xserver/os/io.c @@ -424,8 +424,6 @@ ReadRequestFromClient(ClientPtr client) if (oci->ignoreBytes > 0) { assert(needed == oci->ignoreBytes || needed == oci->size); - oci->ignoreBytes -= gotnow; - needed = gotnow = 0; /* * The _XSERVTransRead call above may return more or fewer bytes than we * want to ignore. Ignore the smaller of the two sizes. |