Author: ivan
Date: Mon Apr 27 19:00:23 2026
New Revision: 1933404

Log:
Fix potential integer overflow in svn_subr__win32_xlate_to_stringbuf().

* subversion/libsvn_subr/win32_xlate.c
  (svn_subr__win32_xlate_to_stringbuf): Check that src_length is less than
   INT_MAX. Otherwise return ERROR_INVALID_PARAMETER.

Modified:
   subversion/trunk/subversion/libsvn_subr/win32_xlate.c

Modified: subversion/trunk/subversion/libsvn_subr/win32_xlate.c
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/win32_xlate.c       Mon Apr 27 
18:45:04 2026        (r1933403)
+++ subversion/trunk/subversion/libsvn_subr/win32_xlate.c       Mon Apr 27 
19:00:23 2026        (r1933404)
@@ -205,8 +205,14 @@ svn_subr__win32_xlate_to_stringbuf(svn_s
     return APR_SUCCESS;
   }
 
-  retval = MultiByteToWideChar(handle->from_page_id, 0, src_data, src_length,
-                               NULL, 0);
+  /* Use ERROR_INVALID_PARAMETER in case of integer overflow:
+     MultiByteToWideChar() returns ERROR_INVALID_PARAMETER in case source
+     string is longer than 2GB and cbMultiByte is -1 (use strlen). */
+  if (src_length > INT_MAX)
+    return APR_FROM_OS_ERROR(ERROR_INVALID_PARAMETER);
+
+  retval = MultiByteToWideChar(handle->from_page_id, 0, src_data,
+                               (int)src_length, NULL, 0);
   if (retval == 0)
     return apr_get_os_error();
 
@@ -222,8 +228,8 @@ svn_subr__win32_xlate_to_stringbuf(svn_s
       wide_str = apr_palloc(pool, wide_size * sizeof(WCHAR));
     }
 
-  retval = MultiByteToWideChar(handle->from_page_id, 0, src_data, src_length,
-                               wide_str, wide_size);
+  retval = MultiByteToWideChar(handle->from_page_id, 0, src_data,
+                               (int)src_length, wide_str, wide_size);
 
   if (retval == 0)
     return apr_get_os_error();

Reply via email to