aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2009-02-18 06:05:09 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2009-02-18 06:05:09 +0000
commit8773f203977c34fee7389f5e2b193df9c501685e (patch)
tree12dede1374e28262c1fa6cbfdea2508e115ea103
parentbf685f46fda028f4437fd5c96a49b4b66f93e3b0 (diff)
Merged revisions 176901 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r176901 | russell | 2009-02-18 00:00:40 -0600 (Wed, 18 Feb 2009) | 9 lines Fix a number of incorrect uses of strncpy(). 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: http://svn.digium.com/svn/asterisk/branches/1.6.1@176903 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--main/pbx.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/main/pbx.c b/main/pbx.c
index 6a62bb24d..7811126cc 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -1469,7 +1469,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);
@@ -1997,7 +1998,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);
@@ -2069,8 +2072,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)) ) {
@@ -4422,7 +4427,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;
@@ -4460,7 +4466,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;
@@ -5780,7 +5787,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;
@@ -7006,7 +7013,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;