Module: kamailio
Branch: 4.1
Commit: 804b7f19dc1b95f9226711125d0239574f0aa0a9
URL: 
https://github.com/kamailio/kamailio/commit/804b7f19dc1b95f9226711125d0239574f0aa0a9

Author: Stefan Mititelu <[email protected]>
Committer: Stefan Mititelu <[email protected]>
Date: 2016-01-22T16:50:57+02:00

dtrie: sanity checks

Segfaults reported by Igor, on sr-Users mailing list.

(cherry picked from commit 825b4fabb9bb4b2cf58dc1205423b8ce5d5e08cc)

---

Modified: lib/trie/dtrie.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/804b7f19dc1b95f9226711125d0239574f0aa0a9.diff
Patch: 
https://github.com/kamailio/kamailio/commit/804b7f19dc1b95f9226711125d0239574f0aa0a9.patch

---

diff --git a/lib/trie/dtrie.c b/lib/trie/dtrie.c
index 783f6e7..abdd589 100644
--- a/lib/trie/dtrie.c
+++ b/lib/trie/dtrie.c
@@ -76,7 +76,9 @@ void dtrie_delete(struct dtrie_node_t *root, struct 
dtrie_node_t *node,
                dt_delete_func_t delete_payload, const unsigned int branches)
 {
        unsigned int i;
-       if (node==NULL) return;
+
+       if (node == NULL) return;
+       if (root == NULL) return;
 
        for (i=0; i<branches; i++) {
                dtrie_delete(root, node->child[i], delete_payload, branches);
@@ -123,6 +125,10 @@ int dtrie_insert(struct dtrie_node_t *root, const char 
*number, const unsigned i
        struct dtrie_node_t *node = root;
        unsigned char digit, i=0;
 
+       if (node == NULL) return -1;
+       if (root == NULL) return -1;
+       if (number == NULL) return -1;
+
        while (i<numberlen) {
                if (branches==10) {
                        digit = number[i] - '0';
@@ -202,6 +208,8 @@ unsigned int dtrie_leaves(const struct dtrie_node_t *root, 
const unsigned int br
 {
        unsigned int i, sum = 0, leaf = 1;
 
+       if (root == NULL) return 0;
+
        for (i=0; i<branches; i++) {
                if (root->child[i]) {
                        sum += dtrie_leaves(root->child[i], branches);
@@ -220,6 +228,10 @@ void **dtrie_longest_match(struct dtrie_node_t *root, 
const char *number,
        unsigned char digit, i = 0;
        void **ret = NULL;
 
+       if (node == NULL) return NULL;
+       if (root == NULL) return NULL;
+       if (number == NULL) return NULL;
+
        if (nmatchptr) *nmatchptr=-1;
        if (node->data != NULL) {
                if (nmatchptr) *nmatchptr=0;


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to