From 53d130951787d05a2ceef116e51856ec95391e77 Mon Sep 17 00:00:00 2001 From: einhornimmond - MarkX Date: Mon, 7 Sep 2020 08:49:36 +0200 Subject: [PATCH] check by using fopen if f is valid, because started in /usr/local/bin without admin don't allow fopen in same dir as binary and leads to Segmentation fault error and crash --- src/cpp/Crypto/mnemonic.cpp | 14 +++++++++----- src/cpp/JSONInterface/JsonRequestHandler.cpp | 8 +++++--- src/cpp/lib/JsonRequest.cpp | 8 +++++--- src/cpp/tasks/SigningTransaction.cpp | 8 +++++--- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/cpp/Crypto/mnemonic.cpp b/src/cpp/Crypto/mnemonic.cpp index cc72fea72..03f0c8bd4 100644 --- a/src/cpp/Crypto/mnemonic.cpp +++ b/src/cpp/Crypto/mnemonic.cpp @@ -64,8 +64,10 @@ int Mnemonic::init(void(*fill_words_func)(unsigned char*), unsigned int original uncompressed_file_name += std::to_string(original_size); uncompressed_file_name += ".txt"; FILE* f = fopen(uncompressed_file_name.data(), "w"); - fwrite(uncompressed_buffer, sizeof(char), original_size, f); - fclose(f); + if (f) { + fwrite(uncompressed_buffer, sizeof(char), original_size, f); + fclose(f); + } unsigned short cursor = 0; u32 word_begin = 0, word_end = 0; @@ -335,9 +337,11 @@ void Mnemonic::printToFile(const char* filename) { std::shared_lock _lock(mWorkingMutex); FILE* f = fopen(filename, "wt"); - auto words = getCompleteWordListSorted(); - fwrite(words.data(), 1, words.size(), f); - fclose(f); + if (f) { + auto words = getCompleteWordListSorted(); + fwrite(words.data(), 1, words.size(), f); + fclose(f); + } } Poco::JSON::Array Mnemonic::getSortedWordList() diff --git a/src/cpp/JSONInterface/JsonRequestHandler.cpp b/src/cpp/JSONInterface/JsonRequestHandler.cpp index 123c36268..c516b844b 100644 --- a/src/cpp/JSONInterface/JsonRequestHandler.cpp +++ b/src/cpp/JSONInterface/JsonRequestHandler.cpp @@ -73,9 +73,11 @@ Poco::Dynamic::Var JsonRequestHandler::parseJsonWithErrorPrintFile(std::istream& std::string dateTimeString = Poco::DateTimeFormatter::format(Poco::DateTime(), "%d_%m_%yT%H_%M_%S"); std::string filename = dateTimeString + "_response.html"; FILE* f = fopen(filename.data(), "wt"); - std::string responseString = responseStringStream.str(); - fwrite(responseString.data(), 1, responseString.size(), f); - fclose(f); + if (f) { + std::string responseString = responseStringStream.str(); + fwrite(responseString.data(), 1, responseString.size(), f); + fclose(f); + } return Poco::Dynamic::Var(); } return Poco::Dynamic::Var(); diff --git a/src/cpp/lib/JsonRequest.cpp b/src/cpp/lib/JsonRequest.cpp index 5e5bedb47..3e05fa85a 100644 --- a/src/cpp/lib/JsonRequest.cpp +++ b/src/cpp/lib/JsonRequest.cpp @@ -70,9 +70,11 @@ JsonRequestReturn JsonRequest::request(const char* methodName, const Poco::Net:: fileName += ".html"; FILE* f = fopen(fileName.data(), "wt"); - std::string responseString = responseStringStream.str(); - fwrite(responseString.data(), 1, responseString.size(), f); - fclose(f); + if (f) { + std::string responseString = responseStringStream.str(); + fwrite(responseString.data(), 1, responseString.size(), f); + fclose(f); + } // */ sendErrorsAsEmail(responseStringStream.str()); return JSON_REQUEST_RETURN_PARSE_ERROR; diff --git a/src/cpp/tasks/SigningTransaction.cpp b/src/cpp/tasks/SigningTransaction.cpp index df317a270..5415d92a7 100644 --- a/src/cpp/tasks/SigningTransaction.cpp +++ b/src/cpp/tasks/SigningTransaction.cpp @@ -220,9 +220,11 @@ int SigningTransaction::run() { addError(new ParamError("SigningTransaction", "error parsing request answer", ex.displayText().data())); FILE* f = fopen("response.html", "wt"); - std::string responseString = responseStringStream.str(); - fwrite(responseString.data(), 1, responseString.size(), f); - fclose(f); + if (f) { + std::string responseString = responseStringStream.str(); + fwrite(responseString.data(), 1, responseString.size(), f); + fclose(f); + } // */ sendErrorsAsEmail(responseStringStream.str()); return -9;