Do a deep copy of file and function strings to avoid a potential crash when
authorRussell Bryant <russell@russellbryant.com>
Tue, 3 Jun 2008 13:29:16 +0000 (13:29 +0000)
committerRussell Bryant <russell@russellbryant.com>
Tue, 3 Jun 2008 13:29:16 +0000 (13:29 +0000)
modules are unloaded.

(closes issue #12780)
Reported by: ys
Patches:
      logger.diff uploaded by ys (license 281)
  -- modified by me for coding guidelines

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

main/logger.c

index 94cbac2..2370447 100644 (file)
@@ -133,9 +133,9 @@ struct logmsg {
        enum logmsgtypes type;
        char date[256];
        int level;
-       const char *file;
+       char file[80];
        int line;
-       const char *function;
+       char function[80];
        AST_LIST_ENTRY(logmsg) list;
        char str[0];
 };
@@ -1135,7 +1135,7 @@ void ast_log(int level, const char *file, int line, const char *function, const
        /* Create a new logging message */
        if (!(logmsg = ast_calloc(1, sizeof(*logmsg) + res + 1)))
                return;
-       
+
        /* Copy string over */
        strcpy(logmsg->str, buf->str);
 
@@ -1148,9 +1148,9 @@ void ast_log(int level, const char *file, int line, const char *function, const
 
        /* Copy over data */
        logmsg->level = level;
-       logmsg->file = file;
        logmsg->line = line;
-       logmsg->function = function;
+       ast_copy_string(logmsg->file, file, sizeof(logmsg->file));
+       ast_copy_string(logmsg->function, function, sizeof(logmsg->function));
 
        /* If the logger thread is active, append it to the tail end of the list - otherwise skip that step */
        if (logthread != AST_PTHREADT_NULL) {