added some more sanity checks for musrview.

This commit is contained in:
2025-11-12 11:05:56 +01:00
parent ddf434f595
commit f1587af451

View File

@@ -135,6 +135,7 @@ int main(int argc, char *argv[])
std::stringstream errMsg;
memset(fileName, '\0', sizeof(fileName));
memset(graphicsExtension, '\0', sizeof(graphicsExtension));
// add default shared library path /usr/local/lib if not already persent
const char *dsp = gSystem->GetDynamicPath();
@@ -149,7 +150,7 @@ int main(int argc, char *argv[])
for (int i=1; i<argc; i++) {
if (strstr(argv[i], ".msr") || strstr(argv[i], ".mlog")) {
if (strlen(fileName) == 0) {
strcpy(fileName, argv[i]);
strncpy(fileName, argv[i], sizeof(fileName));
} else {
std::cerr << std::endl << "**ERROR** only one file name allowed." << std::endl;
show_syntax = true;
@@ -188,7 +189,7 @@ int main(int argc, char *argv[])
!strcmp(argv[i], "--xpm") || !strcmp(argv[i], "--root")) {
graphicsOutput = true;
strcpy(graphicsExtension, argv[i]+2);
strncpy(graphicsExtension, argv[i]+2, sizeof(graphicsExtension));
} else if (!strcmp(argv[i], "--ascii")) {
asciiOutput = true;
} else if (!strcmp(argv[i], "--timeout")) {
@@ -220,13 +221,14 @@ int main(int argc, char *argv[])
// read startup file
char startup_path_name[128];
memset(startup_path_name, '\0', sizeof(startup_path_name));
std::unique_ptr<TSAXParser> saxParser = std::make_unique<TSAXParser>();
std::unique_ptr<PStartupHandler> startupHandler = std::make_unique<PStartupHandler>();
if (!startupHandler->StartupFileFound()) {
std::cerr << std::endl << ">> musrview **WARNING** couldn't find " << startupHandler->GetStartupFilePath().Data();
std::cerr << std::endl;
} else {
strcpy(startup_path_name, startupHandler->GetStartupFilePath().Data());
strncpy(startup_path_name, startupHandler->GetStartupFilePath().Data(), sizeof(startup_path_name));
saxParser->ConnectToHandler("PStartupHandler", startupHandler.get());
//status = saxParser->ParseFile(startup_path_name);
// parsing the file as above seems to lead to problems in certain environments;
@@ -345,7 +347,7 @@ int main(int argc, char *argv[])
TApplication app("App", &cc, args.data());
std::vector<PMusrCanvas*> canvasVector;
PMusrCanvas *musrCanvas;
PMusrCanvas *musrCanvas = nullptr;
bool ok = true;
for (unsigned int i=0; i<msrHandler->GetMsrPlotList()->size(); i++) {
@@ -364,12 +366,21 @@ int main(int argc, char *argv[])
graphicsOutput||asciiOutput,
fourier, avg, theoAtData);
if (musrCanvas == nullptr) {
errMsg << ">> musrview **SEVERE ERROR** Couldn't invoke all necessary objects, will quit.\n";
std::cerr << errMsg.str();
if (show_errMsgBox)
musrview_error_msg(errMsg.str());
ok = false;
break;
}
if (!musrCanvas->IsValid()) {
errMsg << ">> musrview **SEVERE ERROR** Couldn't invoke all necessary objects, will quit.\n";
std::cerr << errMsg.str();
if (show_errMsgBox)
musrview_error_msg(errMsg.str());
ok = false;
delete musrCanvas;
break;
}