The pBell-2 test sets the test type to BAD_LENGTH, which attempts to create a request with a size that is too small by one long (4 bytes). However, it tries to do this with an xBellReq, which is exactly 4 bytes in size. This results in a request with a length field of 0, which triggers the big request handling in the X server. This makes the server interpret the next request as the size part of the Bell request, and hilarity ensues.
Instead, detect this case and bail out with an UNTESTED result. Signed-off-by: Aaron Plattner <aplatt...@nvidia.com> --- pBell-2 and a lot of tests like it test two things: that you get BadLength when the length is too small by one, and that you get BadLength when it's too large by one. The problem is that the -1 case triggers the big request processing. This change masks the second half of the test. Do you guys think it would be a good idea to split all of these tests into separate assertions, or should I leave them the way they are? It would be a little weird because pBell-2 and the new pBell-3 would have the same assertion text, but would have different methods: 520|6 2 00030251 1 3|When a client sends an invalid Bell protocol request to the 520|6 2 00030251 1 4|X server, in which the length field of the request is not 520|6 2 00030251 1 5|the minimum length required to contain the request, then the 520|6 2 00030251 1 6|X server sends back a BadLength error to the client. xts5/src/libproto/MakeReq.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) Here's the summary diff before and after this change: > CASES TESTS PASS UNSUP UNTST NOTIU WARN FIP FAIL UNRES UNIN > ABORT > > -Xproto 122 389 354 0 0 0 0 0 18 17 0 > 0 > +Xproto 122 389 369 0 19 0 0 0 1 0 0 > 0 diff --git a/xts5/src/libproto/MakeReq.c b/xts5/src/libproto/MakeReq.c index df63ac6..90ed8c1 100644 --- a/xts5/src/libproto/MakeReq.c +++ b/xts5/src/libproto/MakeReq.c @@ -1279,7 +1279,17 @@ int type; case BAD_LENGTH: case JUST_TOO_LONG: case TOO_LONG: - rp->length = bad_len; + if (bad_len == 0 && dpy->bigreq_size > 0) { + Log_Msg("This test sends an invalid request with size zero\n"); + Log_Msg(" which would be interpreted as a Big Request by this\n"); + Log_Msg(" server, so this test cannot be performed.\n"); + Free_Req(rp); + rp = NULL; + Destroy_Client(client); + Untested(); + } else { + rp->length = bad_len; + } break; default: Log_Msg ("INTERNAL ERROR: Make_Req - bad test type %d\n", Get_Test_Type(client)); -- 1.7.0.4 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel