--- t.c 2012-11-12 18:17:57.289503725 +0100 +++ xkb-crash.c 2012-11-12 18:46:08.163692089 +0100 @@ -28,10 +28,16 @@ int main() { return -1; } - const xcb_xkb_get_map_map_t *map = (xcb_xkb_get_map_map_t *)xcb_xkb_get_map_map(map_reply); + void *buffer = xcb_xkb_get_map_map(map_reply); + xcb_xkb_get_map_map_t map; + xcb_xkb_get_map_map_unpack(buffer, map_reply->nTypes, map_reply->nKeySyms, map_reply->nKeyActions, + map_reply->totalActions, map_reply->totalKeyBehaviors, map_reply->nVModMapKeys, + map_reply->totalKeyExplicit, map_reply->totalModMapKeys, map_reply->totalVModMapKeys, + map_reply->present, &map); - xcb_xkb_key_v_mod_map_iterator_t iter = xcb_xkb_get_map_map_vmodmap_rtrn_iterator(map_reply, map); - printf("reply %p, map %p, iter %p\n", map_reply, map, iter.data); + + xcb_xkb_key_v_mod_map_iterator_t iter = xcb_xkb_get_map_map_vmodmap_rtrn_iterator(map_reply, &map); + printf("reply %p, map %p, iter %p\n", map_reply, &map, iter.data); xcb_keycode_t key = 0; while (iter.rem) {