summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-03-08xcb_popcount: Use __builtin_popcount if compiler supports itAlan Coopersmith
If the compiler knows of a better implementation for counting the number of bits set in a word for the target CPU, let it use that, instead of the classic algorithm optimized for PDP-6. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2024-03-02tests: fix -Werror=discarded-qualifiers errors in check_public.cAlan Coopersmith
check_public.c: In function ‘parse_display_pass’: check_public.c:32:32: error: passing argument 1 of ‘putenv’ discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers] 32 | putenv("DISPLAY="); | ^~~~~~~~~~ In file included from check_public.c:4: /usr/include/stdlib.h:148:19: note: expected ‘char *’ but argument is of type ‘const char *’ 148 | extern int putenv(char *); | ^~~~~~ check_public.c:57:16: error: passing argument 1 of ‘putenv’ discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers] 57 | putenv("DISPLAY="); | ^~~~~~~~~~ /usr/include/stdlib.h:148:19: note: expected ‘char *’ but argument is of type ‘const char *’ 148 | extern int putenv(char *); | ^~~~~~ check_public.c: In function ‘parse_display_fail’: check_public.c:73:32: error: passing argument 1 of ‘putenv’ discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers] 73 | putenv("DISPLAY="); | ^~~~~~~~~~ /usr/include/stdlib.h:148:19: note: expected ‘char *’ but argument is of type ‘const char *’ 148 | extern int putenv(char *); | ^~~~~~ check_public.c:99:16: error: passing argument 1 of ‘putenv’ discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers] 99 | putenv("DISPLAY="); | ^~~~~~~~~~ /usr/include/stdlib.h:148:19: note: expected ‘char *’ but argument is of type ‘const char *’ 148 | extern int putenv(char *); | ^~~~~~ check_public.c: In function ‘public_suite’: check_public.c:244:16: error: passing argument 1 of ‘putenv’ discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers] 244 | putenv("DISPLAY="); | ^~~~~~~~~~ /usr/include/stdlib.h:148:19: note: expected ‘char *’ but argument is of type ‘const char *’ 148 | extern int putenv(char *); | ^~~~~~ cc1: all warnings being treated as errors Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2024-03-02libxcb 1.16.1libxcb-1.16.1Alan Coopersmith
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2023-11-07Enable large file supportFergus Dall
Signed-off-by: Fergus Dall <sidereal@google.com>
2023-08-28Fix compilation on WindowsPeter Williams
Merge request !30 broke compilation on Windows by introducing unbalanced curly braces. This change restores the previous behavior on Windows: only TCP is supported.
2023-08-20gitlab CI: use latest xcbproto from git to build againstAlan Coopersmith
Closes issue #70 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2023-08-20configure.ac: drop `pthread-stubs` dependency on NetBSDThomas Klausner
2023-08-20gitlab CI: regenerate container used for buildsAlan Coopersmith
This updates the included xcb-proto to the newly required 1.16. As explained in issue #70, this is a quick workaround, not the long-term fix for this problem. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2023-08-16libxcb 1.16libxcb-1.16Matt Turner
Signed-off-by: Matt Turner <mattst88@gmail.com>
2023-08-16configure.ac: Require xcb-proto >= 1.16.0Matt Turner
Signed-off-by: Matt Turner <mattst88@gmail.com>
2023-04-10c_client: Fix crash in xcb_randr_set_monitorIlya Pominov
Take into account c_need_sizeof when evaluating xcb_protocol_request_t.count Incorrect xcb_protocol_request_t.count causes a segmentation fault when calling functions: - xcb_randr_set_monitor{_checked} - xcb_input_change_feedback_control{_checked} - xcb_input_change_device_control{_unchecked} Steps to reproduce: Call xcb_randr_set_monitor() with valid arguments OBSERVED RESULT Segmentation fault ``` Process terminating with default action of signal 11 (SIGSEGV) Access not within mapped region at address 0x780 at 0x4852925: memmove (in /usr/libexec/valgrind/vgpreload_memcheck- amd64-linux.so) by 0x486967C: memcpy (string_fortified.h:29) by 0x486967C: send_request (xcb_out.c:59) by 0x486967C: send_request (xcb_out.c:46) by 0x486967C: xcb_send_request_with_fds64 (xcb_out.c:338) by 0x48699FC: xcb_send_request (xcb_out.c:359) by 0x4891F11: xcb_randr_set_monitor_checked (randr.c:5350) ``` EXPECTED RESULT Function returns cookie Amend: 77b594f9583ea0247ff27130316d8e045da7f921 Signed-off-by: Ilya Pominov <ipominov@astralinux.ru>
2023-03-25Add tests for unix socket parsingDemi Marie Obenour
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2023-03-25DISPLAY starting with / or unix: is always a socket pathDemi Marie Obenour
If DISPLAY starts with / or unix:, do not check for anything but a full filesystem socket path. In particular, abstract AF_UNIX sockets and TCP sockets will not be used in this case. Also be stricter about parsing the screen part of /path.screen displays, and bail out after all stat() errors other than ENOENT. Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2023-03-25Allow full paths to sockets on non-macOSDemi Marie Obenour
When combined with xorg/lib/libxtrans!7, this allows CVE-2020-25697 to be mitigated by placing the AF_UNIX socket in a secure directory on the filesystem. This enables HAVE_LAUNCHD unconditionally and deletes the configure switch. Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2023-02-28Fix xcb_connect() call with a custom xcb_auth_info_tMatthieu Herrb
If the function implementing xcb_connect is called directly with a custom xcb_auth_info_t then checking that the screen in $DISPLAY is valid is skipped. Reported by chohag AT jtan DOT com Signed-off-by: Matthieu Herrb <matthieu@herrb.eu>
2023-02-11configure.ac: drop `pthread-stubs` dependency on DragonFly and FreeBSDJan Beich
All `pthread_*` symbols used by libxcb have stubs in libc. So, stop linking against libpthread.
2023-02-09Raise minimum required version of Python from 2.6 to 3.0Alan Coopersmith
Trying to build with Python 2.7.14 fails with: File "./c_client.py", line 2270 key = (*self.name[:-1], field.enum) ^ SyntaxError: invalid syntax Fixes: 33f3dbe ("Fix handling of documented enum parameters") Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2023-02-06configure.ac: Remove obsolete AC_HEADER_STDCAlan Coopersmith
Nothing checks for the STDC_HEADERS flag this set, and all supported systems have C89 compatible headers now. Clears autoconf warnings of: configure.ac:93: warning: The macro `AC_HEADER_STDC' is obsolete. configure.ac:93: You should run autoupdate. ./lib/autoconf/headers.m4:704: AC_HEADER_STDC is expanded from... configure.ac:93: the top level Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2023-01-09Fix indentation.Daniel G
2023-01-07Fix windows build.Daniel G
2022-11-26xcb_conn: Add a check for NULL to silence a UBSan runtime errorJeremy Huddleston Sequoia
xcb_conn.c:314:60: runtime error: applying zero offset to null pointer Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2022-10-16Fix handling of documented enum parametersDemi Marie Obenour
Previously this would crash the code generator. Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2022-10-16Fix a compiler warningDemi Marie Obenour
The warning is harmless but annoying. Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
2022-10-04configure.ac: drop dependency `pthread-stubs` on SolarisAlan Coopersmith
On Solaris 10 and later, the pthread functions are directly in libc, and libpthread only has metadata to redirect calls from it to the libc functions. On Solaris 9 and older (no longer supported), libc contained its own thread stubs that libpthread then overrode. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-09-28configure.ac: drop dependency `pthread-stubs` on macOSPaperChalice
`libpthread.dylib` on macOS is an alias of `libSystem.B.dylib`, every program should link against `libSystem.B.dylib`.
2022-09-28Improve tutorial exampleUli Schlachter
This tutorial example only handles XCB_EXPOSURE and XCB_KEY_RELEASE events and ignores everything else. Thus, there is no point in asking for more kinds of events. A while ago, I ported this tutorial to x11rb [1]. Recently, I received a pull request [2] removing these unnecessary event masks. This commit is thus only partially by me and the 'issue' was originally found by the author of [2]. [1]: https://github.com/psychon/x11rb/blob/master/x11rb/examples/tutorial.rs [2]: https://github.com/psychon/x11rb/pull/754 Signed-off-by: Uli Schlachter <psychon@znc.in>
2022-07-24autogen: add default patch prefixMihail Konev
Signed-off-by: Mihail Konev <k.mvc@ya.ru> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-07-24autogen.sh: use quoted string variablesEmil Velikov
Place quotes around the $srcdir, $ORIGDIR and $0 variables to prevent fall-outs, when they contain space. Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-07-24autogen.sh: use exec instead of waiting for configure to finishPeter Hutterer
Syncs the invocation of configure with the one from the server. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Emil Velikov <emil.velikov@collabora.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-07-18gitlab CI: add a basic build testAlan Coopersmith
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-06-22Require xcb-proto >= 1.15.1, which has DbeMike Sharov
Signed-off-by: Mike Sharov <msharov@users.sourceforge.net>
2022-06-02Build DOUBLE-BUFFER extension.Mike Sharov
Signed-off-by: Mike Sharov <msharov@users.sourceforge.net>
2022-05-03libxcb 1.15libxcb-1.15Matt Turner
Signed-off-by: Matt Turner <mattst88@gmail.com>
2022-01-15Fix a memory leakHodong
Signed-off-by: Hodong <hodong@yozmos.com>
2021-11-17Fix integer overflows in xcb_in.cDemi Marie Obenour
This fixes an integer overflow security vulnerability in xcb_in.c, which may allow for memory corruption.
2021-09-30Fix hang in xcb_request_check()Thomas Anderson
This fixes https://gitlab.freedesktop.org/xorg/lib/libxcb/-/issues/53 The issue was that libxcb expected to get a reply based on the request_expected variable, but a reply would never arrive because the request was never actually written. To resolve this, a separate request_expected_written variable is added.
2021-09-30Avoid request counter truncation in replies map after 2**32 requestsRan Benita
The c->in request counters are uint64_t, and can realistically go over 2**32 over a lifetime of a client. The c->in->replies map however uses unsigned int keys and the passed request numbers are silently truncated. I haven't analyzed in depth what happens what it wraps around but it's probably nothing good. The only user of the xcb_list.c map code is c->in->replies, so just change it to use uint64_t keys. Reviewed-by: Uli Schlachter <psychon@znc.in> Signed-off-by: Ran Benita <ran@unusedvar.com>
2021-09-30Add newline when printing auth/connection failure string to stderrJulien Cristau
The reason strings returned by the server don't all include a newline, so make sure we add one to avoid confusing clients. Xlib used to do this before it delegated that work to libxcb. Fixes #34 Signed-off-by: Julien Cristau <jcristau@debian.org>
2021-09-20Improve/fix docs for reply fds functionsUli Schlachter
Fixes: https://gitlab.freedesktop.org/xorg/lib/libxcb/-/issues/56 Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-07-30c_client.py: Implement handling of <length> elementPovilas Kanapickas
Signed-off-by: Povilas Kanapickas <povilas@radix.lt>
2021-07-30c_client: Extract _c_get_field_mapping_for_expr()Povilas Kanapickas
2021-07-30c_client.py: Use get_expr_field_names directly to resolve list fieldsPovilas Kanapickas
Using get_expr_fields() is only needed in case we are doing things that can span multiple types easily, e.g. when deciding what data to pass via function parameters and so on. In _c_serialize_helper_list_field() we are building function body, so acquiring field names via get_expr_field_names() is enough. Signed-off-by: Povilas Kanapickas <povilas@radix.lt>
2021-07-30c_client.py: Extract get_expr_field_names()Povilas Kanapickas
Signed-off-by: Povilas Kanapickas <povilas@radix.lt>
2021-06-04Fix writev emulation on WindowsPeter Harris
There are at least two bugs in the previous implementation: - If an early iovec is partially written, there can be a gap of missing data (as a later iovec will be started before the early iovec is completed). - If a late iovec returns WSAEWOULDBLOCK, *vector and *count are not updated, leading to a re-send of the entire request. Move the *vector update into the send() loop to update piecemeal as individual iovecs are sent. Example program that demonstrates the issue (this program should run forever after these bugs have been fixed): #include <stdio.h> #include <stdlib.h> #include "xcb.h" // Non-cryptographic random number generator from http://burtleburtle.net/bob/rand/smallprng.html // because Microsoft's random number generators either have a too small RAND_MAX or are too slow typedef struct ranctx { uint32_t a; uint32_t b; uint32_t c; uint32_t d; } ranctx; static uint32_t ranval(ranctx *x); static void raninit(ranctx *x, uint32_t seed); #define MAX_PROP_LEN (128 * 1024) int main(int argc, char *argv[]) { uint32_t seed = 0x12345678; if (argc > 1) { seed = strtoul(argv[1], NULL, 0); } ranctx ran; raninit(&ran, seed); xcb_connection_t *c = xcb_connect(NULL, NULL); if (!c || xcb_connection_has_error(c)) { printf("Cannot connect to $DISPLAY\n"); return 1; } const xcb_setup_t *setup = xcb_get_setup(c); char *buf = malloc(MAX_PROP_LEN + 8); // plus a bit of slack so we can run random values off the end if (!buf) { printf("oom\n"); return 1; } for (uint32_t i=0; i < (MAX_PROP_LEN + 3) / 4; i++) { ((uint32_t *)buf)[i] = ranval(&ran); } xcb_window_t win = xcb_generate_id(c); xcb_create_window(c, 0, win, xcb_setup_roots_iterator(setup).data[0].root, 0, 0, 1, 1, 0, XCB_WINDOW_CLASS_INPUT_ONLY, 0, 0, NULL); printf("Created window 0x%X\n", win); for (;;) { xcb_flush(c); xcb_generic_event_t *ev = xcb_poll_for_event(c); if (ev) { if (ev->response_type == 0) { xcb_generic_error_t *err = (xcb_generic_error_t *)ev; printf("Unexpected X Error %d\n", err->error_code); printf(" Sequence %d\n", err->sequence); printf(" Resource ID 0x%X\n", err->resource_id); printf(" Opcode: %d.%d\n", err->major_code, err->minor_code); return 1; } printf("Unexpected X Event %d\n", ev->response_type); return 1; } uint32_t siz = ranval(&ran) % MAX_PROP_LEN + 1; xcb_change_property(c, XCB_PROP_MODE_REPLACE, win, XCB_ATOM_STRING, XCB_ATOM_STRING, 8, siz, buf); } return 0; } #define rot(x,k) (((x)<<(k))|((x)>>(32-(k)))) static uint32_t ranval(ranctx *x) { uint32_t e = x->a - rot(x->b, 27); x->a = x->b ^ rot(x->c, 17); x->b = x->c + x->d; x->c = x->d + e; x->d = e + x->a; return x->d; } static void raninit(ranctx *x, uint32_t seed) { uint32_t i; x->a = 0xf1ea5eed, x->b = x->c = x->d = seed; for (i = 0; i<20; ++i) { (void)ranval(x); } } Signed-off-by: Peter Harris <pharris@opentext.com>
2021-06-04Fix build on WindowsPeter Harris
Notable changes: Protect include of unistd.h (and other POSIX headers). Use SOCKET (which is larger than int) and closesocket (because close is not compatible) for sockets. Use <stdint.h>'s intptr_t instead of the non-portable ssize_t. Signed-off-by: Peter Harris <pharris@opentext.com>
2021-06-01xcb_auth: Quiet -Wimplicit-fallthrough warning in get_authptr()Alan Coopersmith
xcb_auth.c:135:14: warning: this statement may fall through [-Wimplicit-fallthrough=] addr += 12; ~~~~~^~~~~ xcb_auth.c:138:5: note: here case AF_INET: ^~~~ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2021-02-02Increment libtool version info for libxcb-dri3Julien Cristau
Somewhat belatedly given the last update was in xcb-proto 1.13 in 2017... Quoting @smcv from https://bugs.debian.org/921069: >>> libxcb-dri3 version 1.13 appears to have added new symbols without increasing the minor ABI version in its -version-info. This will break anything that compares libraries by their version info to decide which one is newer. The Steam Runtime uses libraries' major/minor/micro ABI version info (in this case 0.0.0) to decide whether to use the system copy of a library or the copy in the Steam Runtime, depending on which one is newer (#921026). We can work around this by adding a versioned dependency on libxcb-dri3-0 and deleting the copy from the Steam Runtime, but this isn't a particularly scalable solution. >>>
2020-11-18gitignore: add files generated by make checkRan Benita
Signed-off-by: Ran Benita <ran@unusedvar.com>
2020-11-18tests: don't use deprecated fail_unless check APIRan Benita
It causes errors like this when running make check: check_public.c:40:24: error: too many arguments for format [-Werror=format-extra-args] 40 | fail_unless(success, "unexpected parse failure %sfor '%s'", test_string[test_type], name); Closes: https://gitlab.freedesktop.org/xorg/lib/libxcb/-/issues/49 Tested-by: Matt Turner <mattst88@gmail.com> Signed-off-by: Ran Benita <ran@unusedvar.com>
2020-03-02Use the 'present' field to properly check that the XC-MISCEduardo Sánchez Muñoz
extension is available in xcb_generate_id. Also document the returned value when xcb_generate_id fails.