@@ -246,7 +246,10 @@ impl<'d> HidChannel<'d> {
246246 pub async fn hid_send ( & self , msg : & HidMessage ) -> Result < ( ) , Error > {
247247 match & self . open_device {
248248 OpenHidDevice :: HidApiDevice ( hidapi_device) => {
249- let guard = hidapi_device. lock ( ) . unwrap ( ) ;
249+ let Ok ( guard) = hidapi_device. lock ( ) else {
250+ warn ! ( "Poisoned lock on HID API device" ) ;
251+ return Err ( Error :: Transport ( TransportError :: ConnectionLost ) ) ;
252+ } ;
250253 Self :: hid_send_hidapi ( guard. deref ( ) , msg)
251254 }
252255 #[ cfg( feature = "virtual-hid-device" ) ]
@@ -264,7 +267,9 @@ impl<'d> HidChannel<'d> {
264267 report. extend ( vec ! [ 0 ; PACKET_SIZE - packet. len( ) ] ) ;
265268 debug ! ( { packet = i, len = report. len( ) } , "Sending packet as HID report" , ) ;
266269 trace ! ( ?report) ;
267- device. write ( & report) . unwrap ( ) ;
270+ device
271+ . write ( & report)
272+ . or ( Err ( Error :: Transport ( TransportError :: ConnectionLost ) ) ) ?;
268273 }
269274 Ok ( ( ) )
270275 }
@@ -307,7 +312,10 @@ impl<'d> HidChannel<'d> {
307312 loop {
308313 let response = match & self . open_device {
309314 OpenHidDevice :: HidApiDevice ( hidapi_device) => {
310- let guard = hidapi_device. lock ( ) . unwrap ( ) ;
315+ let Ok ( guard) = hidapi_device. lock ( ) else {
316+ warn ! ( "Poisoned lock on HID API device" ) ;
317+ return Err ( Error :: Transport ( TransportError :: ConnectionLost ) ) ;
318+ } ;
311319 Self :: hid_recv_hidapi ( guard. deref ( ) , timeout)
312320 }
313321 #[ cfg( feature = "virtual-hid-device" ) ]
@@ -440,7 +448,9 @@ impl Channel for HidChannel<'_> {
440448 let cid = self . init . cid ;
441449 debug ! ( { cid } , "Sending APDU request" ) ;
442450 trace ! ( ?request) ;
443- let apdu_raw = request. raw_long ( ) . unwrap ( ) ;
451+ let apdu_raw = request
452+ . raw_long ( )
453+ . map_err ( |e| TransportError :: IoError ( e. kind ( ) ) ) ?;
444454 self . hid_send ( & HidMessage :: new ( cid, HidCommand :: Msg , & apdu_raw) )
445455 . await ?;
446456 Ok ( ( ) )
0 commit comments