summaryrefslogtreecommitdiff
path: root/libs/pjproject/patches/0171-dialog-set-free.patch
diff options
context:
space:
mode:
authorJiri Slachta <jiri@slachta.eu>2022-12-03 17:15:19 +0100
committerGitHub <noreply@github.com>2022-12-03 17:15:19 +0100
commit920fbc5c0a2e4badf51bceff42e9a1e3eb693462 (patch)
treed027ebd2d7d52d52ce275b4f0f77de919acd3f66 /libs/pjproject/patches/0171-dialog-set-free.patch
parente2f370462421e20cccf09aa155cb78e6ff60d0c0 (diff)
parent4f4e681c20ac28976ea7487957d14b20674d7d93 (diff)
Merge pull request #793 from micmac1/ast-18.5.1-21.02openwrt-21.02
[21.02] asterisk: bump to 18.15.1
Diffstat (limited to 'libs/pjproject/patches/0171-dialog-set-free.patch')
-rw-r--r--libs/pjproject/patches/0171-dialog-set-free.patch109
1 files changed, 0 insertions, 109 deletions
diff --git a/libs/pjproject/patches/0171-dialog-set-free.patch b/libs/pjproject/patches/0171-dialog-set-free.patch
deleted file mode 100644
index d113117..0000000
--- a/libs/pjproject/patches/0171-dialog-set-free.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-From db3235953baa56d2fb0e276ca510fefca751643f Mon Sep 17 00:00:00 2001
-From: Nanang Izzuddin <nanang@teluu.com>
-Date: Mon, 21 Feb 2022 06:24:52 +0700
-Subject: [PATCH] Merge pull request from GHSA-ffff-m5fm-qm62
-
-* Update pjsip_ua_unregister_dlg():
-- update the hash key if the dialog being unregistered is used as hash key.
-- add an assertion check to make sure that the dlg_set to be removed is valid (can be found in the hash table).
-
-* Change hash key string comparison method.
----
- pjsip/src/pjsip/sip_ua_layer.c | 48 +++++++++++++++++++++++++++++-----
- 1 file changed, 42 insertions(+), 6 deletions(-)
-
---- a/pjsip/src/pjsip/sip_ua_layer.c
-+++ b/pjsip/src/pjsip/sip_ua_layer.c
-@@ -65,6 +65,9 @@ struct dlg_set
- /* This is the buffer to store this entry in the hash table. */
- pj_hash_entry_buf ht_entry;
-
-+ /* Entry key in the hash table */
-+ pj_str_t ht_key;
-+
- /* List of dialog in this dialog set. */
- struct dlg_set_head dlg_list;
- };
-@@ -321,6 +324,7 @@ PJ_DEF(pj_status_t) pjsip_ua_register_dl
- * Create the dialog set and add this dialog to it.
- */
- dlg_set = alloc_dlgset_node();
-+ dlg_set->ht_key = dlg->local.info->tag;
- pj_list_init(&dlg_set->dlg_list);
- pj_list_push_back(&dlg_set->dlg_list, dlg);
-
-@@ -328,8 +332,8 @@ PJ_DEF(pj_status_t) pjsip_ua_register_dl
-
- /* Register the dialog set in the hash table. */
- pj_hash_set_np_lower(mod_ua.dlg_table,
-- dlg->local.info->tag.ptr,
-- (unsigned)dlg->local.info->tag.slen,
-+ dlg_set->ht_key.ptr,
-+ (unsigned)dlg_set->ht_key.slen,
- dlg->local.tag_hval, dlg_set->ht_entry,
- dlg_set);
- }
-@@ -339,14 +343,15 @@ PJ_DEF(pj_status_t) pjsip_ua_register_dl
- struct dlg_set *dlg_set;
-
- dlg_set = alloc_dlgset_node();
-+ dlg_set->ht_key = dlg->local.info->tag;
- pj_list_init(&dlg_set->dlg_list);
- pj_list_push_back(&dlg_set->dlg_list, dlg);
-
- dlg->dlg_set = dlg_set;
-
- pj_hash_set_np_lower(mod_ua.dlg_table,
-- dlg->local.info->tag.ptr,
-- (unsigned)dlg->local.info->tag.slen,
-+ dlg_set->ht_key.ptr,
-+ (unsigned)dlg_set->ht_key.slen,
- dlg->local.tag_hval, dlg_set->ht_entry, dlg_set);
- }
-
-@@ -391,12 +396,43 @@ PJ_DEF(pj_status_t) pjsip_ua_unregister_
-
- /* If dialog list is empty, remove the dialog set from the hash table. */
- if (pj_list_empty(&dlg_set->dlg_list)) {
-- pj_hash_set_lower(NULL, mod_ua.dlg_table, dlg->local.info->tag.ptr,
-- (unsigned)dlg->local.info->tag.slen,
-+
-+ /* Verify that the dialog set is valid */
-+ pj_assert(pj_hash_get_lower(mod_ua.dlg_table, dlg_set->ht_key.ptr,
-+ (unsigned)dlg_set->ht_key.slen,
-+ &dlg->local.tag_hval) == dlg_set);
-+
-+ pj_hash_set_lower(NULL, mod_ua.dlg_table, dlg_set->ht_key.ptr,
-+ (unsigned)dlg_set->ht_key.slen,
- dlg->local.tag_hval, NULL);
-
- /* Return dlg_set to free nodes. */
- pj_list_push_back(&mod_ua.free_dlgset_nodes, dlg_set);
-+ } else {
-+ /* If the just unregistered dialog is being used as hash key,
-+ * reset the dlg_set entry with a new key (i.e: from the first dialog
-+ * in dlg_set).
-+ */
-+ if (dlg_set->ht_key.ptr == dlg->local.info->tag.ptr &&
-+ dlg_set->ht_key.slen == dlg->local.info->tag.slen)
-+ {
-+ pjsip_dialog* key_dlg = dlg_set->dlg_list.next;
-+
-+ /* Verify that the old & new keys share the hash value */
-+ pj_assert(key_dlg->local.tag_hval == dlg->local.tag_hval);
-+
-+ pj_hash_set_lower(NULL, mod_ua.dlg_table, dlg_set->ht_key.ptr,
-+ (unsigned)dlg_set->ht_key.slen,
-+ dlg->local.tag_hval, NULL);
-+
-+ dlg_set->ht_key = key_dlg->local.info->tag;
-+
-+ pj_hash_set_np_lower(mod_ua.dlg_table,
-+ dlg_set->ht_key.ptr,
-+ (unsigned)dlg_set->ht_key.slen,
-+ key_dlg->local.tag_hval, dlg_set->ht_entry,
-+ dlg_set);
-+ }
- }
-
- /* Unlock user agent. */