From aa7f68ba3e102252452f49bc5c36a22e0a50111a Mon Sep 17 00:00:00 2001 From: malc Date: Tue, 16 Oct 2012 13:55:38 +0400 Subject: [PATCH] More robust .Xauthority processing .Xauthority can be partially corrupt [1], validate input and actually log all unexpected exceptions. Thanks to coroa for analysis. [1] https://bbs.archlinux.org/viewtopic.php?pid=1113586 --- wsi.ml | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/wsi.ml b/wsi.ml index 9f764c7..8560006 100644 --- a/wsi.ml +++ b/wsi.ml @@ -747,18 +747,32 @@ let getauth haddr dnum = let family = input_string ic 2 in let addr = rs () in let nums = rs () in - let num = int_of_string nums in + let optnum = + try Some (int_of_string nums) + with exn -> + dolog + "display number(%S) is not an integer (corrupt .Xauthority?): %s" + nums (exntos exn); + None + in let name = rs () in let data = rs () in - vlog "family %S addr %S(%S) num %d(%d) name %S data %S" - family addr haddr num dnum name data; - if addr = haddr && num = dnum - then name, data - else find () + vlog "family %S addr %S(%S) num %S(%d) name %S data %S" + family addr haddr nums dnum name data; + match optnum with + | Some num when addr = haddr && num = dnum -> + name, data + | _ -> find () in let name, data = - try find () with _ -> "", "" + try find () + with + | End_of_file -> "", "" + | exn -> + dolog "exception while reading .Xauthority data: %s" + (exntos exn); + "", "" in close_in ic; name, data; -- 2.11.4.GIT