git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 2/4] sparse-checkout: fix OOM error with mixed patterns

From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
Date
Dec 10, 2021, 15:18 UTC
Message-ID
<86fbf130c039b2c087974b213e12919f7809e05b.1639149490.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.1069.v2.git.1639149490.gitgitgadget@gmail.com>
From: Derrick Stolee <dstolee@microsoft.com>

Add a test to t1091-sparse-checkout-builtin.sh that would result in an infinite loop and out-of-memory error before this change. The issue relies on having non-cone-mode patterns while trying to modify the patterns in cone-mode.

The fix is simple, allowing us to break from the loop when the input path does not contain a slash, as the "dir" pattern we added does not.

This is only a fix to the critical out-of-memory error. A better response to such a strange state will follow in a later change.

Reported-by: Calbabreaker <calbabreaker@gmail.com>
Helped-by: Taylor Blau <me@ttaylorr.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
---
 builtin/sparse-checkout.c          |  2 +-
 t/t1091-sparse-checkout-builtin.sh | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c
index d0f5c4702be..9ccdcde9832 100644
--- a/builtin/sparse-checkout.c
+++ b/builtin/sparse-checkout.c
@@ -483,7 +483,7 @@ static void insert_recursive_pattern(struct pattern_list *pl, struct strbuf *pat
 		char *oldpattern = e->pattern;
 		size_t newlen;
 
-		if (slash == e->pattern)
+		if (!slash || slash == e->pattern)
 			break;
 
 		newlen = slash - e->pattern;
diff --git a/t/t1091-sparse-checkout-builtin.sh b/t/t1091-sparse-checkout-builtin.sh
index c72b8ee2e7b..67ce24c9c83 100755
--- a/t/t1091-sparse-checkout-builtin.sh
+++ b/t/t1091-sparse-checkout-builtin.sh
@@ -103,6 +103,17 @@ test_expect_success 'clone --sparse' '
 	check_files clone a
 '
 
+test_expect_success 'switching to cone mode with non-cone mode patterns' '
+	git init bad-patterns &&
+	(
+		cd bad-patterns &&
+		git sparse-checkout init &&
+		git sparse-checkout add dir &&
+		git config core.sparseCheckoutCone true &&
+		git sparse-checkout add dir
+	)
+'
+
 test_expect_success 'interaction with clone --no-checkout (unborn index)' '
 	git clone --no-checkout "file://$(pwd)/repo" clone_no_checkout &&
 	git -C clone_no_checkout sparse-checkout init --cone &&
-- 
gitgitgadget
Previous: Derrick Stolee via GitGitGadgetNext: Derrick Stolee via GitGitGadget
Message 9 of 24 in “sparse-checkout: fix segfault on malformed patterns”
  1. 0/3 sparse-checkout: fix segfault on malformed patternsDerrick Stolee via GitGitGadget, Dec 7, 2021
  2. 1/3 sparse-checkout: fix segfault on malformed patternsDerrick Stolee via GitGitGadget, Dec 7, 2021
  3. Elijah NewrenDec 7, 2021
  4. 2/3 sparse-checkout: fix OOM error with mixed patternsDerrick Stolee via GitGitGadget, Dec 7, 2021
  5. 3/3 sparse-checkout: refuse to add to bad patternsDerrick Stolee via GitGitGadget, Dec 7, 2021
  6. Elijah NewrenDec 7, 2021
  7. Derrick StoleeDec 8, 2021
  8. 0/4 sparse-checkout: fix segfault on malformed patternsDerrick Stolee via GitGitGadget, Dec 10, 2021
  9. 2/4 sparse-checkout: fix OOM error with mixed patternsDerrick Stolee via GitGitGadget, Dec 10, 2021
  10. 1/4 sparse-checkout: fix segfault on malformed patternsDerrick Stolee via GitGitGadget, Dec 10, 2021
  11. 3/4 sparse-checkout: refuse to add to bad patternsDerrick Stolee via GitGitGadget, Dec 10, 2021
  12. 0/3 sparse-checkout: fix segfault on malformed patternsDerrick Stolee via GitGitGadget, Dec 15, 2021
  13. 1/3 sparse-checkout: fix segfault on malformed patternsDerrick Stolee via GitGitGadget, Dec 15, 2021
  14. Junio C HamanoDec 15, 2021
  15. Derrick StoleeDec 16, 2021
  16. 2/3 sparse-checkout: fix OOM error with mixed patternsDerrick Stolee via GitGitGadget, Dec 15, 2021
  17. 3/3 sparse-checkout: refuse to add to bad patternsDerrick Stolee via GitGitGadget, Dec 15, 2021
  18. Junio C HamanoDec 15, 2021
  19. Derrick StoleeDec 16, 2021
  20. Junio C HamanoDec 16, 2021
  21. 0/3 sparse-checkout: fix segfault on malformed patternsDerrick Stolee via GitGitGadget, Dec 16, 2021
  22. 1/3 sparse-checkout: fix segfault on malformed patternsDerrick Stolee via GitGitGadget, Dec 16, 2021
  23. 2/3 sparse-checkout: fix OOM error with mixed patternsDerrick Stolee via GitGitGadget, Dec 16, 2021
  24. 3/3 sparse-checkout: refuse to add to bad patternsDerrick Stolee via GitGitGadget, Dec 16, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.