From ecd042812d3ded6c1e05cc27538da99336d42afc Mon Sep 17 00:00:00 2001
From: Laurent Laffont <llaffont@afi-sa.fr>
Date: Fri, 10 Dec 2021 15:40:28 +0100
Subject: [PATCH] hotline #146510 Limit execution time of grep/sort to 1s

in order to prevent server load when lot of autocompletion requests
are sent
---
 VERSIONS_HOTLINE/146510                      | 1 +
 library/Class/Autocomplete/IndexSearcher.php | 2 +-
 tests/eco/BokehEngineEcoTest.php             | 2 +-
 3 files changed, 3 insertions(+), 2 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/146510

diff --git a/VERSIONS_HOTLINE/146510 b/VERSIONS_HOTLINE/146510
new file mode 100644
index 00000000000..1aa3cb4a19c
--- /dev/null
+++ b/VERSIONS_HOTLINE/146510
@@ -0,0 +1 @@
+ - ticket #146510 : Autocompletion : limitation du temps maximum de réponse à 1s
\ No newline at end of file
diff --git a/library/Class/Autocomplete/IndexSearcher.php b/library/Class/Autocomplete/IndexSearcher.php
index 4bdb0e1ea7c..69644a23870 100644
--- a/library/Class/Autocomplete/IndexSearcher.php
+++ b/library/Class/Autocomplete/IndexSearcher.php
@@ -68,7 +68,7 @@ class Class_Autocomplete_IndexSearcher {
       $grep_args []= "-i -E '(\b|'\'')" . $term . "'";
 
     $grep_args[] = "-m 10 ".array_pop($grep_args);
-    return 'grep '.implode(' | grep ', $grep_args);
+    return 'timeout 1s grep '.implode(' | grep ', $grep_args);
   }
 
 
diff --git a/tests/eco/BokehEngineEcoTest.php b/tests/eco/BokehEngineEcoTest.php
index 35c8c847127..5be8e01fdf2 100644
--- a/tests/eco/BokehEngineEcoTest.php
+++ b/tests/eco/BokehEngineEcoTest.php
@@ -138,7 +138,7 @@ class BokehEcoSuggestAjaxActionTest extends BokehEngineEcoTestCase {
   /** @test */
   public function grepCommandForIleMaiteShouldRestrictLastResultToTen() {
     $this->assertEquals(
-                        "grep -riI -E --no-filename '(\b|'\'')M[aàáâãäå][iìíîï]t[eèéêë][eèéêë]' | sort -Vuf | grep -i -E '(\b|'\'')l'\''[iìíîï]l[eèéêë]' | grep -i -E '(\b|'\'')[iìíîï]l[eèéêë]' | grep -m 10 -i -E '(\b|'\'')d[eèéêë]'",
+                        "timeout 1s grep -riI -E --no-filename '(\b|'\'')M[aàáâãäå][iìíîï]t[eèéêë][eèéêë]' | sort -Vuf | grep -i -E '(\b|'\'')l'\''[iìíîï]l[eèéêë]' | grep -i -E '(\b|'\'')[iìíîï]l[eèéêë]' | grep -m 10 -i -E '(\b|'\'')d[eèéêë]'",
                         (new Class_Autocomplete_IndexSearcher)->buildGrepCommand("l'ile dE Maitee"));
   }
 
-- 
GitLab