odk/source/unoapploader/win/unoapploader.c |   18 ++++++------------
 sal/osl/w32/process.cxx                    |    6 ++----
 2 files changed, 8 insertions(+), 16 deletions(-)

New commits:
commit 7e5a704e7c57f499e6f232b1a346d207f271430b
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Sun Mar 30 10:45:15 2025 +0100
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Sun Mar 30 14:38:05 2025 +0200

    Use _wputenv_s instead of _wputenv
    
    Avoids unneeded concatenations; also it's documented as "more secure".
    
    Change-Id: Idbe0bd330992833bc70231a069ddbd808ea94b62
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183502
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/odk/source/unoapploader/win/unoapploader.c 
b/odk/source/unoapploader/win/unoapploader.c
index 67c684b86d8a..e0c32cf1b459 100644
--- a/odk/source/unoapploader/win/unoapploader.c
+++ b/odk/source/unoapploader/win/unoapploader.c
@@ -204,22 +204,16 @@ int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE 
hPrevInstance,
          * note that this only affects the environment variable of the current
          * process, the command processor's environment is not changed
          */
-        size_t size = wcslen( ENVVARNAME ) + wcslen( L"=" ) + wcslen( path ) + 
1;
-        if ( value != NULL )
-            size += wcslen( PATHSEPARATOR ) + wcslen( value );
-        wchar_t* envstr = (wchar_t*) malloc( size*sizeof(wchar_t) );
-        assert(envstr);
-        wcscpy( envstr, ENVVARNAME );
-        wcscat( envstr, L"=" );
-        wcscat( envstr, path );
         if ( value != NULL )
         {
-            wcscat( envstr, PATHSEPARATOR );
-            wcscat( envstr, value );
+            size_t size = wcslen(path) + wcslen(PATHSEPARATOR) + wcslen(value) 
+ 1;
+            path = (wchar_t*)realloc(path, size * sizeof(wchar_t));
+            assert(path);
+            wcscat(path, PATHSEPARATOR);
+            wcscat(path, value);
         }
         /* coverity[tainted_data : FALSE] */
-        _wputenv( envstr );
-        free( envstr );
+        _wputenv_s(ENVVARNAME, path);
         free( path );
     }
     else
diff --git a/sal/osl/w32/process.cxx b/sal/osl/w32/process.cxx
index 756ae5f4dbac..259e18c2f781 100644
--- a/sal/osl/w32/process.cxx
+++ b/sal/osl/w32/process.cxx
@@ -443,8 +443,7 @@ oslProcessError SAL_CALL osl_setEnvironment(rtl_uString 
*ustrVar, rtl_uString *u
     // set Windows environment variable
     if (SetEnvironmentVariableW(o3tl::toW(ustrVar->buffer), 
o3tl::toW(ustrValue->buffer)))
     {
-        OUString sAssign = OUString::unacquired(&ustrVar) + "=" + 
OUString::unacquired(&ustrValue);
-        _wputenv(o3tl::toW(sAssign.getStr()));
+        _wputenv_s(o3tl::toW(ustrVar->buffer), o3tl::toW(ustrValue->buffer));
         return osl_Process_E_None;
     }
     return osl_Process_E_Unknown;
@@ -456,8 +455,7 @@ oslProcessError SAL_CALL osl_clearEnvironment(rtl_uString 
*ustrVar)
     // by setting SetEnvironmentVariable's second parameter to NULL
     if (SetEnvironmentVariableW(o3tl::toW(ustrVar->buffer), nullptr))
     {
-        OUString sAssign = OUString::unacquired(&ustrVar) + "=";
-        _wputenv(o3tl::toW(sAssign.getStr()));
+        _wputenv_s(o3tl::toW(ustrVar->buffer), L"");
         return osl_Process_E_None;
     }
     return osl_Process_E_Unknown;

Reply via email to