You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@guacamole.apache.org by "sdixon (Jira)" <ji...@apache.org> on 2026/09/10 09:21:00 UTC
[jira] [Created] (GUACAMOLE-2328) Move `gdi_init()` from PreConnect to PostConnect — it crashes on FreeRDP 3.31.0+, where `context->cache` does not exist until after PreConnect returns
sdixon created GUACAMOLE-2328:
---------------------------------
Summary: Move `gdi_init()` from PreConnect to PostConnect — it crashes on FreeRDP 3.31.0+, where `context->cache` does not exist until after PreConnect returns
Key: GUACAMOLE-2328
URL: https://issues.apache.org/jira/browse/GUACAMOLE-2328
Project: Guacamole
Issue Type: Bug
Components: guacd
Affects Versions: 1.6.0
Reporter: sdixon
`src/protocols/rdp/rdp.c` calls `gdi_init()` from `rdp_freerdp_pre_connect()`.
FreeRDP 3.31.0 removed `context->cache = cache_new(context)` from `gdi_init_ex()`
and moved cache creation into the core, where it now runs at Confirm Active —
after PreConnect returns. `gdi_init_ex()` still calls the `*_cache_register_callbacks()`
functions, which dereference that cache. So on 3.31.0+ every RDP connection
dereferences NULL inside `gdi_init_ex()`.
FreeRDP were asked first and consider it a Guacamole bug, pointing at the call
site directly:
> https://github.com/apache/guacamole-server/blob/d3b7828977c63a5b197158d6cbbdaf1846b579fb/src/protocols/rdp/rdp.c#L197
> is in PreConnect callback - something that was never supported (or done in any
> of the reference clients)
That seems right. PostConnect is where FreeRDP's own clients call `gdi_init()`,
and it is also more correct on its own terms: the GDI is then sized from the
geometry the server actually negotiated rather than the geometry requested.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)