Escape all env var strings sent to the Python interpreter
Fixes https://gitlab.com/kicad/code/kicad/issues/5130
This commit is contained in:
parent
259cacf648
commit
0a0ed9e064
|
@ -319,6 +319,26 @@ void pcbnewFinishPythonScripting()
|
|||
}
|
||||
|
||||
|
||||
wxString PyEscapeString( const wxString& aSource )
|
||||
{
|
||||
wxString converted;
|
||||
|
||||
for( wxUniChar c: aSource )
|
||||
{
|
||||
if( c == '\\' )
|
||||
converted += "\\\\";
|
||||
else if( c == '\'' )
|
||||
converted += "\\\'";
|
||||
else if( c == '\"' )
|
||||
converted += "\\\"";
|
||||
else
|
||||
converted += c;
|
||||
}
|
||||
|
||||
return converted;
|
||||
}
|
||||
|
||||
|
||||
void pcbnewUpdatePythonEnvVar( const std::string& aVar, const wxString& aValue )
|
||||
{
|
||||
char cmd[1024];
|
||||
|
@ -327,11 +347,14 @@ void pcbnewUpdatePythonEnvVar( const std::string& aVar, const wxString& aValue )
|
|||
if( !Py_IsInitialized() )
|
||||
return;
|
||||
|
||||
wxString escapedVar = PyEscapeString( aVar );
|
||||
wxString escapedVal = PyEscapeString( aValue );
|
||||
|
||||
snprintf( cmd, sizeof( cmd ),
|
||||
"# coding=utf-8\n" // The values could potentially be UTF8
|
||||
"os.environ[\"%s\"]=\"%s\"\n",
|
||||
aVar.c_str(),
|
||||
TO_UTF8( aValue ) );
|
||||
TO_UTF8( escapedVar ),
|
||||
TO_UTF8( escapedVal ) );
|
||||
|
||||
PyLOCK lock;
|
||||
|
||||
|
@ -342,7 +365,6 @@ void pcbnewUpdatePythonEnvVar( const std::string& aVar, const wxString& aValue )
|
|||
}
|
||||
|
||||
|
||||
|
||||
#if defined( KICAD_SCRIPTING_WXPYTHON )
|
||||
void RedirectStdio()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue