From e973e406a37207492a35bc7cd78c91419105b7fc Mon Sep 17 00:00:00 2001 From: James Turner Date: Sat, 9 Nov 2013 07:22:15 -0800 Subject: [PATCH] Fix some SVN errors/crashes. --- simgear/io/SVNReportParser.cxx | 3 ++- simgear/io/SVNRepository.cxx | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/simgear/io/SVNReportParser.cxx b/simgear/io/SVNReportParser.cxx index 9a3077d2..b7f99d24 100644 --- a/simgear/io/SVNReportParser.cxx +++ b/simgear/io/SVNReportParser.cxx @@ -417,15 +417,16 @@ public: } else if (!strcmp(name, SVN_DAV_MD5_CHECKSUM)) { // validate against (presumably) just written file if (decodedFileMd5 != md5Sum) { + SG_LOG(SG_GENERAL, SG_INFO, "checksum fail on:" << currentPath); fail(SVNRepository::SVN_ERROR_CHECKSUM); } } else if (!strcmp(name, SVN_OPEN_DIRECTORY_TAG)) { + currentDir->updateReportComplete(); if (currentDir->parent()) { // pop the collection stack currentDir = currentDir->parent(); } - currentDir->updateReportComplete(); currentPath = currentDir->fsPath(); } else { // std::cout << "element:" << name; diff --git a/simgear/io/SVNRepository.cxx b/simgear/io/SVNRepository.cxx index cd0f378f..d3635fe8 100644 --- a/simgear/io/SVNRepository.cxx +++ b/simgear/io/SVNRepository.cxx @@ -136,6 +136,7 @@ namespace { // anonmouse SG_LOG(SG_IO, SG_WARN, "request for:" << url() << " return code " << responseCode()); _repo->propFindFailed(this, SVNRepository::SVN_ERROR_SOCKET); + _repo = NULL; } } @@ -163,6 +164,7 @@ namespace { // anonmouse { HTTP::Request::onFail(); _repo->propFindFailed(this, SVNRepository::SVN_ERROR_SOCKET); + _repo = NULL; } private: @@ -244,15 +246,19 @@ protected: SVNRepository::ResultCode err = _parser.parseXML(s, n); if (err) { _failed = true; - SG_LOG(SG_IO, SG_WARN, "SVN: request for:" << url() << " failed:" << err); + SG_LOG(SG_IO, SG_WARN, _repo->p << ": SVN: request for:" << url() << " failed:" << err); _repo->updateFailed(this, err); + _repo = NULL; } } virtual void onFail() { HTTP::Request::onFail(); - _repo->updateFailed(this, SVNRepository::SVN_ERROR_SOCKET); + if (_repo) { + _repo->updateFailed(this, SVNRepository::SVN_ERROR_SOCKET); + _repo = NULL; + } } private: SVNReportParser _parser; -- 2.39.5