Mercurial > octave
comparison src/main-cli.cc @ 29699:b98ae05c6b7e
avoid possible buffer corruption introduced in b6f80b1d448f
* mkoctfile.in.cc (main): Save arguments in vector of string objects.
(wmain): Don't generate char** argv array since we convert its
elements back to string objects for most processing anyway. Use
std::string operator== instead of strcmp.
* main-cli.cc, main-gui.cc (wmain): Save copies of arguments in
generated argv array.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 24 May 2021 14:27:07 -0400 |
parents | b6f80b1d448f |
children | 96eb9a6f868b |
comparison
equal
deleted
inserted
replaced
29698:bbf5d4ea616c | 29699:b98ae05c6b7e |
---|---|
98 // convert wide character strings to multibyte UTF-8 strings | 98 // convert wide character strings to multibyte UTF-8 strings |
99 std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> wchar_conv; | 99 std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> wchar_conv; |
100 for (int i_arg = 0; i_arg < argc; i_arg++) | 100 for (int i_arg = 0; i_arg < argc; i_arg++) |
101 { | 101 { |
102 argv_str.push_back (wchar_conv.to_bytes (wargv[i_arg])); | 102 argv_str.push_back (wchar_conv.to_bytes (wargv[i_arg])); |
103 argv[i_arg] = &argv_str[i_arg][0]; | 103 |
104 // Save the string becuase argv_str[i_arg] may return a temporary. | |
105 argv[i_arg] = strsave (&argv_str[i_arg][0]); | |
104 } | 106 } |
105 argv[argc] = nullptr; | 107 argv[argc] = nullptr; |
106 | 108 |
107 #else | 109 #else |
108 int | 110 int |