From 94e4de6fd3413827dffec06d5a74b3e673a7cc2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edwin=20T=C3=B6r=C3=B6k?= Date: Wed, 4 Nov 2020 19:52:20 +0000 Subject: XSA-354: ls_lR: separate recursion into separate function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will make it easier to add quota checks. Signed-off-by: Edwin Török Acked-by: Christian Lindig diff --git a/xc/xenops_server_xen.ml b/xc/xenops_server_xen.ml index 912e97fa..84c59f13 100644 --- a/xc/xenops_server_xen.ml +++ b/xc/xenops_server_xen.ml @@ -2591,9 +2591,11 @@ module VM = struct (Uuidm.to_string uuid)) with Xs_protocol.Enoent _ -> "" in - let rec ls_lR root acc dir = + let ls_l root dir = let entry = root ^ "/" ^ dir in - let acc = try (dir, xs.Xs.read entry) :: acc with _ -> acc in + let value_opt = + try Some (dir, xs.Xs.read entry) with _ -> None + in let subdirs = try xs.Xs.directory entry @@ -2601,6 +2603,13 @@ module VM = struct |> map_tr (fun x -> dir ^ "/" ^ x) with _ -> [] in + (value_opt, subdirs) + in + let rec ls_lR root acc dir = + let value_opt, subdirs = ls_l root dir in + let acc = + match value_opt with Some v -> v :: acc | None -> acc + in List.fold_left (ls_lR root) acc subdirs in let guest_agent =