maxBigRequestSize can be greater than MAXBUFSIZE, so clients (libXrender) that try to fully utilize BigReqs get an XIO error as the connection is forcibly closed. Even s/MAXBUFSIZE/maxBigRequestSize<<2/ prevents the client from receiving a BadLength error for an over-long request. It appears that simply terminating the client if the request buffer can not be grown to accommodate the request seems the only sane approach - that is completely discard the "request is too large to handle" check. diff --git a/os/io.c b/os/io.c index 4e83e68..b7dd3a2 100644 --- a/os/io.c +++ b/os/io.c @@ -308,12 +308,6 @@ ReadRequestFromClient(ClientPtr client) */ oci->lenLastReq = 0; - if (needed > MAXBUFSIZE) - { - /* request is too big for us to handle */ - YieldControlDeath(); - return -1; - } if ((gotnow == 0) || ((oci->bufptr - oci->buffer + needed) > oci->size)) {
*** Bug 4135 has been marked as a duplicate of this bug. ***
This seems to have been already fixed in git master: commit ca82d4bddf235c9b68d51d68636bab40eafb9889 Author: Eric Anholt <eric@anholt.net> Date: Fri Aug 31 13:00:23 2007 -0700 Bug #7186: Fix an excessive request size limitation that broke big-requests. MAXBUFSIZE appears to be a leftover of some previous time. Instead, just use maxBigRequestSize when bigreqs are available (limiting buffers to ~16MB) When bigreqs are not available, needed won't be larger than the maximum size of a non-bigreqs request (256kB). diff --git a/os/io.c b/os/io.c index 835af54..9de75ee 100644 --- a/os/io.c +++ b/os/io.c @@ -304,12 +304,14 @@ #endif */ oci->lenLastReq = 0; - if (needed > MAXBUFSIZE) +#ifdef BIGREQS + if (needed > maxBigRequestSize << 2) { /* request is too big for us to handle */ YieldControlDeath(); return -1; } +#endif if ((gotnow == 0) || ((oci->bufptr - oci->buffer + needed) > oci->size)) { diff --git a/os/osdep.h b/os/osdep.h index 965436d..2d455aa 100644 --- a/os/osdep.h +++ b/os/osdep.h @@ -55,9 +55,6 @@ #define _OSDEP_H_ 1 #define BOTIMEOUT 200 /* in milliseconds */ #define BUFSIZE 4096 #define BUFWATERMARK 8192 -#ifndef MAXBUFSIZE -#define MAXBUFSIZE (1 << 22) -#endif #include <X11/Xdmcp.h> *** This bug has been marked as a duplicate of bug 7186 ***
*** Bug 99726 has been marked as a duplicate of this bug. ***
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.