summaryrefslogtreecommitdiff
path: root/net-misc/asterisk/files/asterisk-13.33.0-nossl.patch
diff options
context:
space:
mode:
Diffstat (limited to 'net-misc/asterisk/files/asterisk-13.33.0-nossl.patch')
-rw-r--r--net-misc/asterisk/files/asterisk-13.33.0-nossl.patch94
1 files changed, 94 insertions, 0 deletions
diff --git a/net-misc/asterisk/files/asterisk-13.33.0-nossl.patch b/net-misc/asterisk/files/asterisk-13.33.0-nossl.patch
new file mode 100644
index 000000000000..5fb0c5650e54
--- /dev/null
+++ b/net-misc/asterisk/files/asterisk-13.33.0-nossl.patch
@@ -0,0 +1,94 @@
+From 2513235859fc50e8c28545977702b9b7b439f5f5 Mon Sep 17 00:00:00 2001
+From: Joshua C. Colp <jcolp@sangoma.com>
+Date: Wed, 24 Jun 2020 07:25:47 -0300
+Subject: [PATCH] menuselect: Resolve infinite loop in dependency scenario.
+
+Given a scenario where a module has a dependency on both
+an external library and a module if the external library was
+available and the module was not an infinite loop would
+occur. This happened due to the code changing the dependecy
+status to no failure on each dependency checking loop
+iteration, resulting in the code thinking that it had
+gone from no failure to failure each time triggering another
+dependency check.
+
+This change makes it so that the old dependency status is
+preserved throughout the dependency checking allowing it to
+determine that after the first iteration the dependency
+status does not transition from no failure to failure.
+
+ASTERISK-28930
+
+Change-Id: Iea06d45d9fd6d8bfd068882a0bb7e23a53ec3e84
+---
+
+diff --git a/menuselect/menuselect.c b/menuselect/menuselect.c
+index 83f6098..a595ce8 100644
+--- a/menuselect/menuselect.c
++++ b/menuselect/menuselect.c
+@@ -630,14 +630,14 @@
+ struct member *mem;
+ struct reference *dep;
+ struct dep_file *dep_file;
+- unsigned int changed, old_failure;
++ unsigned int changed;
+
+ AST_LIST_TRAVERSE(&categories, cat, list) {
+ AST_LIST_TRAVERSE(&cat->members, mem, list) {
+ if (mem->is_separator) {
+ continue;
+ }
+- old_failure = mem->depsfailed;
++ mem->depsfailedold = mem->depsfailed;
+ AST_LIST_TRAVERSE(&mem->deps, dep, list) {
+ if (dep->member)
+ continue;
+@@ -655,7 +655,7 @@
+ break; /* This dependency is not met, so we can stop now */
+ }
+ }
+- if (old_failure == SOFT_FAILURE && mem->depsfailed != HARD_FAILURE)
++ if (mem->depsfailedold == SOFT_FAILURE && mem->depsfailed != HARD_FAILURE)
+ mem->depsfailed = SOFT_FAILURE;
+ }
+ }
+@@ -673,8 +673,6 @@
+ continue;
+ }
+
+- old_failure = mem->depsfailed;
+-
+ if (mem->depsfailed == HARD_FAILURE)
+ continue;
+
+@@ -693,7 +691,7 @@
+ }
+ }
+
+- if (mem->depsfailed != old_failure) {
++ if (mem->depsfailed != mem->depsfailedold) {
+ if ((mem->depsfailed == NO_FAILURE) && mem->was_defaulted) {
+ mem->enabled = !strcasecmp(mem->defaultenabled, "yes");
+ print_debug("Just set %s enabled to %d\n", mem->name, mem->enabled);
+@@ -702,6 +700,8 @@
+ print_debug("Just set %s enabled to %d\n", mem->name, mem->enabled);
+ }
+ changed = 1;
++ /* We need to update the old failed deps for the next loop of this */
++ mem->depsfailedold = mem->depsfailed;
+ break; /* This dependency is not met, so we can stop now */
+ }
+ }
+diff --git a/menuselect/menuselect.h b/menuselect/menuselect.h
+index 78ae8ef..d41859e 100644
+--- a/menuselect/menuselect.h
++++ b/menuselect/menuselect.h
+@@ -78,6 +78,8 @@
+ unsigned int was_enabled:1;
+ /*! This module has failed dependencies */
+ unsigned int depsfailed:2;
++ /*! Previous failed dependencies when calculating */
++ unsigned int depsfailedold:2;
+ /*! This module has failed conflicts */
+ unsigned int conflictsfailed:2;
+ /*! This module's 'enabled' flag was changed by a default only */