From f17d397771164c1b0f77fea8fb0abdc99cf4a3e1 Mon Sep 17 00:00:00 2001
From: ChuanGang Jiang <jiangchuanganghw@outlook.com>
Date: Mon, 27 Feb 2023 11:46:12 +0000
Subject: [PATCH] fts: fail gracefully when out of memory

* lib/fts.c (fts_read): Set errno==ENOMEM and return NULL
when setup_dir() fails, rather than hitting an assertion later.
---
 ChangeLog | 6 ++++++
 lib/fts.c | 6 +++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index ed886704d7..25610ee51b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2023-02-27  ChuanGang Jiang  <jiangchuanganghw@outlook.com>
+
+	fts: fail gracefully when out of memory
+	* lib/fts.c (fts_read): Set errno==ENOMEM and return NULL
+	when setup_dir() fails, rather than hitting an assertion later.
+
 2023-02-26  Jim Meyering  <meyering@fb.com>
 
 	announce-gen: spell OpenBSD with a capital "O"
diff --git a/lib/fts.c b/lib/fts.c
index 78584b2902..794a4f75d7 100644
--- a/lib/fts.c
+++ b/lib/fts.c
@@ -979,7 +979,11 @@ next:   tmp = p;
                         }
                         free_dir(sp);
                         fts_load(sp, p);
-                        setup_dir(sp);
+                        if (! setup_dir(sp)) {
+                                free_dir(sp);
+                                __set_errno (ENOMEM);
+                                return (NULL);
+                        }
                         goto check_for_dir;
                 }
 
-- 
2.39.5