From: w00t Date: Thu, 23 Oct 2008 18:07:07 +0000 (+0000) Subject: Patch from dz to fix bug 622 (config errors build up from /rehash to /rehash), thanks! X-Git-Tag: v2.0.23~2418 X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;h=2f1b4c7ce35651262f7903e801fd9428881ee05b;p=user%2Fhenk%2Fcode%2Finspircd.git Patch from dz to fix bug 622 (config errors build up from /rehash to /rehash), thanks! git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10690 e03df62e-2008-0410-955e-edbf42e46eb7 --- diff --git a/include/configreader.h b/include/configreader.h index 2ccabc5b4..859e5bddb 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -349,7 +349,7 @@ class CoreExport ServerConfig : public Extensible /** Error stream, contains error output from any failed configuration parsing. */ - std::ostringstream errstr; + std::ostringstream* errstr; /** Holds the new configuration when a rehash occurs so we dont overwrite the existing * working config with a broken one without checking it first and swapping pointers. diff --git a/src/configreader.cpp b/src/configreader.cpp index 493bba8c9..50e86f4df 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -747,7 +747,8 @@ void ServerConfig::Read(bool bail, const std::string &useruid) static char announceinvites[MAXBUF]; /* options:announceinvites setting */ static char disabledumodes[MAXBUF]; /* Disabled usermodes */ static char disabledcmodes[MAXBUF]; /* Disabled chanmodes */ - errstr.clear(); + /* std::ostringstream::clear() does not clear the string itself, only the error flags. */ + this->errstr = new std::ostringstream(std::stringstream::in | std::stringstream::out); include_stack.clear(); @@ -940,11 +941,14 @@ void ServerConfig::Read(bool bail, const std::string &useruid) /* Make a copy here so if it fails then we can carry on running with an unaffected config */ newconfig.clear(); - if (!this->DoInclude(newconfig, ServerInstance->ConfigFileName, errstr)) + if (!this->DoInclude(newconfig, ServerInstance->ConfigFileName, *errstr)) { - ReportConfigError(errstr.str(), bail, useruid); + ReportConfigError(errstr->str(), bail, useruid); + delete errstr; return; } + + delete errstr; /* The stuff in here may throw CoreException, be sure we're in a position to catch it. */ try