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