mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-16 05:00:35 +00:00
Make reading of environment variable safer
This commit is contained in:
parent
5722a3f9aa
commit
bbaa660f66
@ -56,6 +56,7 @@
|
|||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstdlib> // for getenv()
|
#include <cstdlib> // for getenv()
|
||||||
|
#include <cstring> // for strncpy
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <list> // for std::list
|
#include <list> // for std::list
|
||||||
|
|
||||||
@ -1962,15 +1963,20 @@ bool Gnuplot::get_program_path()
|
|||||||
char *path;
|
char *path;
|
||||||
// Retrieves a C string containing the value of environment variable PATH
|
// Retrieves a C string containing the value of environment variable PATH
|
||||||
path = std::getenv("PATH");
|
path = std::getenv("PATH");
|
||||||
|
char secured_path[4096];
|
||||||
if (path == NULL || std::char_traits<char>::length(path) > 4096 * sizeof(char))
|
size_t len = strlen(path);
|
||||||
|
if (path && len < 4046 * sizeof(char))
|
||||||
{
|
{
|
||||||
throw GnuplotException("Path is not set");
|
strncpy(secured_path, path, len);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
throw GnuplotException("Path is not set or it is too long");
|
||||||
|
}
|
||||||
|
secured_path[len] = '\0';
|
||||||
|
std::string path_str(secured_path);
|
||||||
|
|
||||||
std::list<std::string> ls;
|
std::list<std::string> ls;
|
||||||
std::string path_str(path);
|
|
||||||
|
|
||||||
//split path (one long string) into list ls of strings
|
//split path (one long string) into list ls of strings
|
||||||
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__TOS_WIN__)
|
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__TOS_WIN__)
|
||||||
@ -1999,7 +2005,6 @@ bool Gnuplot::get_program_path()
|
|||||||
Gnuplot::m_sGNUPlotPath + "\"";
|
Gnuplot::m_sGNUPlotPath + "\"";
|
||||||
Gnuplot::m_sGNUPlotPath = "";
|
Gnuplot::m_sGNUPlotPath = "";
|
||||||
throw GnuplotException(tmp);
|
throw GnuplotException(tmp);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user