<html>
    <head>
      <base href="https://bugs.freedesktop.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - NULL dereference in weston_pointer_send_frame with RDP backend"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=93833#c5">Comment # 5</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - NULL dereference in weston_pointer_send_frame with RDP backend"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=93833">bug 93833</a>
              from <span class="vcard"><a class="email" href="mailto:lnicola@dend.ro" title="Laurentiu Nicola <lnicola@dend.ro>"> <span class="fn">Laurentiu Nicola</span></a>
</span></b>
        <pre>(In reply to Jonas Ådahl from <a href="show_bug.cgi?id=93833#c3">comment #3</a>)
<span class="quote">> (In reply to Laurentiu Nicola from <a href="show_bug.cgi?id=93833#c2">comment #2</a>)
> > Connecting with freerdp seems to work, at least with my patch applied.

> Do you have that patch somewhere?</span >

Sorry, what I meant is that even after fixing the crash here (see attached
patch), weston still crashes with mstsc, while it works with wfreerdp. When I
made that comment I didn't know whether connecting with wfreerdp worked without
my initial patch.

I tested it in the meanwhile and:

1. the original code crashes with both wfreerdp and mstsc
2. with my fix, wfreerdp can connect, while mstsc can't:

[08:12:30.778] kbd_layout:0x409 kbd_type:0x7 kbd_subType:0x0
kbd_functionKeys:0xc
[08:12:30.778] xf_peer_activate: matching layout=us variant=(null)
[08:12:30.886] unable to checkDescriptor for 0x731010
[Thread 0x7fffe860a700 (LWP 18653) exited]
[Thread 0x7fffe7e09700 (LWP 18652) exited]
[Thread 0x7fffe7608700 (LWP 18651) exited]
[Thread 0x7fffe6e07700 (LWP 18650) exited]
[08:12:30.889] input_method disconnected, respawning...
[08:12:30.889] launching '/usr/lib/weston/weston-keyboard'
wl_registry@2: error 0: invalid global wl_seat (14)
[08:12:30.893] Error: /usr/lib/weston/weston-desktop-shell apparently cannot
run at all.
Quitting...wl_registry@2: error 0: invalid global wl_seat (14)
[Inferior 1 (process 18640) exited normally]

3. there are a few other places in the same file that lack the same NULL check

I'm not familiar with the code, so I don't know whether focus_client should be
NULL.

PS: while toying with it, I also got another crash:

Program received signal SIGSEGV, Segmentation fault.
weston_compositor_wake (compositor=compositor@entry=0x0) at
../src/compositor.c:3894
3894            uint32_t old_state = compositor->state;
(gdb) bt
#0  weston_compositor_wake (compositor=compositor@entry=0x0) at
../src/compositor.c:3894
#1  0x00000000004131c3 in notify_motion_absolute (seat=seat@entry=0x71c608,
time=2089892085, x=x@entry=143872, y=y@entry=84992) at ../src/input.c:1281
#2  0x00007ffff61c4e3b in xf_mouseEvent (input=<optimized out>,
flags=<optimized out>, x=<optimized out>, y=<optimized out>) at
../src/compositor-rdp.c:956
#3  0x00007ffff5f0f61c in fastpath_recv_inputs () from
/usr/lib/libfreerdp.so.2.0
#4  0x00007ffff5f1f1b7 in ?? () from /usr/lib/libfreerdp.so.2.0
#5  0x00007ffff5f1f7a8 in ?? () from /usr/lib/libfreerdp.so.2.0
#6  0x00007ffff5f124f0 in transport_check_fds () from
/usr/lib/libfreerdp.so.2.0
#7  0x00007ffff5f0b338 in rdp_check_fds () from /usr/lib/libfreerdp.so.2.0
#8  0x00007ffff5f1ef23 in ?? () from /usr/lib/libfreerdp.so.2.0
#9  0x00007ffff61c4c88 in rdp_client_activity (fd=<optimized out>,
mask=<optimized out>, data=0x730ec0) at ../src/compositor-rdp.c:658
#10 0x00007ffff7bd2462 in wl_event_loop_dispatch () from
/usr/lib/libwayland-server.so.0
#11 0x00007ffff7bd0cc5 in wl_display_run () from
/usr/lib/libwayland-server.so.0
#12 0x000000000041c22b in main (argc=1, argv=0x7fffffffe4d8) at
../src/main.c:859
(gdb) l
3889     * Restarts the idle timer.
3890     */
3891    WL_EXPORT void
3892    weston_compositor_wake(struct weston_compositor *compositor)
3893    {
3894            uint32_t old_state = compositor->state;
3895
3896            /* The state needs to be changed before emitting the wake
3897             * signal because that may try to schedule a repaint which
3898             * will not work if the compositor is still sleeping */
(gdb) p compositor
$1 = (struct weston_compositor *) 0x0</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>