Skip to content

Commit 318495e

Browse files
committed
fix: copy strings on Python 2
1 parent 1ede69e commit 318495e

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

include/pybind11/embed.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ inline void set_interpreter_argv(int argc, const char* const* argv, bool add_pro
125125
if (special_case)
126126
argc = 1;
127127

128-
#if PY_MAJOR_VERSION >= 3
129128
auto argv_size = static_cast<size_t>(argc);
129+
#if PY_MAJOR_VERSION >= 3
130130
// SetArgv* on python 3 takes wchar_t, so we have to convert.
131131
std::unique_ptr<wchar_t*[]> widened_argv(new wchar_t*[argv_size]);
132132
std::vector< std::unique_ptr<wchar_t[], wide_char_arg_deleter> > widened_argv_entries;
@@ -144,7 +144,11 @@ inline void set_interpreter_argv(int argc, const char* const* argv, bool add_pro
144144
auto pysys_argv = widened_argv.get();
145145
#else
146146
// python 2.x
147-
char** pysys_argv = const_cast<char**>safe_argv;
147+
std::vector<std::string> strings{safe_argv, safe_argv+argv_size};
148+
std::vector<char*> char_strings{argv_size};
149+
for (std::size_t i=0; i<argv_size; ++i)
150+
char_strings[i] = &strings[i][0];
151+
char** pysys_argv = char_strings.data();
148152
#endif
149153

150154
PySys_SetArgvEx(argc, pysys_argv, static_cast<int>(add_program_dir_to_path));

0 commit comments

Comments
 (0)