]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix a number of incorrect uses of strncpy().
authorRussell Bryant <russell@russellbryant.com>
Wed, 18 Feb 2009 06:00:40 +0000 (06:00 +0000)
committerRussell Bryant <russell@russellbryant.com>
Wed, 18 Feb 2009 06:00:40 +0000 (06:00 +0000)
The big problem here is that the 3rd argument provided in these uses of strncpy()
did not reserve a byte for the null terminator, leaving the potential for writing
one byte past the end of the buffer.

Aside from this, there were coding guidelines violations with regards to spacing,
as well as hard coded lengths being used instead of sizeof().

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@176901 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/pbx.c

index 0807edf72476593a68f7f5f3d6f5a0230205980a..84e727127be02d4b870f2090fc7f897581a9f4fa 100644 (file)
@@ -1858,7 +1858,8 @@ static struct match_char *add_exten_to_pattern_tree(struct ast_context *con, str
        int l1 = strlen(e1->exten) + strlen(e1->cidmatch) + 2;
        
 
-       strncpy(extenbuf,e1->exten,sizeof(extenbuf));
+       ast_copy_string(extenbuf, e1->exten, sizeof(extenbuf));
+
        if (e1->matchcid &&  l1 <= sizeof(extenbuf)) {
                strcat(extenbuf,"/");
                strcat(extenbuf,e1->cidmatch);
@@ -2386,7 +2387,9 @@ struct ast_context *ast_context_find(const char *name)
 {
        struct ast_context *tmp = NULL;
        struct fake_context item;
-       strncpy(item.name,name,256);
+
+       ast_copy_string(item.name, name, sizeof(item.name));
+
        ast_rdlock_contexts();
        if( contexts_table ) {
                tmp = ast_hashtab_lookup(contexts_table,&item);
@@ -2458,8 +2461,10 @@ struct ast_exten *pbx_find_extension(struct ast_channel *chan,
                tmp = bypass;
        else {  /* look in contexts */
                struct fake_context item;
-               strncpy(item.name,context,256);
-               tmp = ast_hashtab_lookup(contexts_table,&item);
+
+               ast_copy_string(item.name, context, sizeof(item.name));
+
+               tmp = ast_hashtab_lookup(contexts_table, &item);
 #ifdef NOTNOW
                tmp = NULL;
                while ((tmp = ast_walk_contexts(tmp)) ) {
@@ -4900,7 +4905,8 @@ int ast_context_lockmacro(const char *context)
 
        ast_rdlock_contexts();
 
-       strncpy(item.name,context,256);
+       ast_copy_string(item.name, context, sizeof(item.name));
+
        c = ast_hashtab_lookup(contexts_table,&item);
        if (c)
                ret = 0;
@@ -4938,7 +4944,8 @@ int ast_context_unlockmacro(const char *context)
 
        ast_rdlock_contexts();
 
-       strncpy(item.name, context, 256);
+       ast_copy_string(item.name, context, sizeof(item.name));
+
        c = ast_hashtab_lookup(contexts_table,&item);
        if (c)
                ret = 0;
@@ -6309,7 +6316,7 @@ struct ast_context *ast_context_find_or_create(struct ast_context **extcontexts,
                                                                                   0);
        }
        
-       strncpy(search.name,name,sizeof(search.name));
+       ast_copy_string(search.name, name, sizeof(search.name));
        if (!extcontexts) {
                ast_rdlock_contexts();
                local_contexts = &contexts;
@@ -7540,7 +7547,7 @@ int ast_add_extension2(struct ast_context *con,
        
        if (con->pattern_tree) { /* usually, on initial load, the pattern_tree isn't formed until the first find_exten; so if we are adding
                                                                an extension, and the trie exists, then we need to incrementally add this pattern to it. */
-               strncpy(dummy_name,extension,sizeof(dummy_name));
+               ast_copy_string(dummy_name, extension, sizeof(dummy_name));
                dummy_exten.exten = dummy_name;
                dummy_exten.matchcid = 0;
                dummy_exten.cidmatch = 0;