]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[master] strdup journal filename
authorEvan Hunt <each@isc.org>
Tue, 10 Sep 2013 05:12:47 +0000 (22:12 -0700)
committerEvan Hunt <each@isc.org>
Tue, 10 Sep 2013 05:12:47 +0000 (22:12 -0700)
3646. [bug] Journal filename string could be set incorrectly,
                        causing garbage in log messages.  [RT #34738]

CHANGES
lib/dns/journal.c

diff --git a/CHANGES b/CHANGES
index 5a2e5d7e4158070409e740fcd59debb541d2b2c2..a2a2b00521fc889cd605d2d6326e0c052e236410 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3646.  [bug]           Journal filename string could be set incorrectly,
+                        causing garbage in log messages.  [RT #34738]
+
        --- 9.10.0a1 released --
 
 3645.  [protocol]      Use case sensitive compression when responding to
index 08aabd5aa29aef7c42a6c1c3bb54ee0a424e6fad..46a52e15b3e372acbd8c0d02138ed3de24c6b75e 100644 (file)
@@ -307,7 +307,7 @@ struct dns_journal {
        unsigned int            magic;          /*%< JOUR */
        isc_mem_t               *mctx;          /*%< Memory context */
        journal_state_t         state;
-       const char              *filename;      /*%< Journal file name */
+       char                    *filename;      /*%< Journal file name */
        FILE *                  fp;             /*%< File handle */
        isc_offset_t            offset;         /*%< Current file offset */
        journal_header_t        header;         /*%< In-core journal header */
@@ -573,10 +573,13 @@ journal_open(isc_mem_t *mctx, const char *filename, isc_boolean_t write,
        isc_mem_attach(mctx, &j->mctx);
        j->state = JOURNAL_STATE_INVALID;
        j->fp = NULL;
-       j->filename = filename;
+       j->filename = isc_mem_strdup(mctx, filename);
        j->index = NULL;
        j->rawindex = NULL;
 
+       if (j->filename == NULL)
+               FAIL(ISC_R_NOMEMORY);
+
        result = isc_stdio_open(j->filename, write ? "rb+" : "rb", &fp);
 
        if (result == ISC_R_FILENOTFOUND) {
@@ -679,6 +682,8 @@ journal_open(isc_mem_t *mctx, const char *filename, isc_boolean_t write,
                            sizeof(journal_rawpos_t));
                j->index = NULL;
        }
+       if (j->filename != NULL)
+               isc_mem_free(j->mctx, j->filename);
        if (j->fp != NULL)
                (void)isc_stdio_close(j->fp);
        isc_mem_putanddetach(&j->mctx, j, sizeof(*j));
@@ -1242,7 +1247,8 @@ dns_journal_destroy(dns_journal_t **journalp) {
                isc_mem_put(j->mctx, j->it.target.base, j->it.target.length);
        if (j->it.source.base != NULL)
                isc_mem_put(j->mctx, j->it.source.base, j->it.source.length);
-
+       if (j->filename != NULL)
+               isc_mem_free(j->mctx, j->filename);
        if (j->fp != NULL)
                (void)isc_stdio_close(j->fp);
        j->magic = 0;