Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2016-11-24 12:40:14 +0300
committerCorinna Vinschen <corinna@vinschen.de>2016-11-24 12:40:14 +0300
commit40668dcc7cb823ba01599f30d3aed40d7d9659f6 (patch)
tree39faaaa4bf83cf696c070128c193c0c5a8a79c6f
parent9fbd510569df2916cbcc69d46e1d0da9f63643e1 (diff)
Add length check creating domain\group strings
Fix Coverity CID 153932 Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r--winsup/cygwin/sec_auth.cc12
1 files changed, 6 insertions, 6 deletions
diff --git a/winsup/cygwin/sec_auth.cc b/winsup/cygwin/sec_auth.cc
index 468d048ef..50823c613 100644
--- a/winsup/cygwin/sec_auth.cc
+++ b/winsup/cygwin/sec_auth.cc
@@ -342,9 +342,9 @@ static bool
get_user_groups (WCHAR *logonserver, cygsidlist &grp_list,
PWCHAR user, PWCHAR domain)
{
- WCHAR dgroup[MAX_DOMAIN_NAME_LEN + GNLEN + 2];
+ WCHAR dgroup[MAX_DOMAIN_NAME_LEN + GNLEN + 2], *grp_p;
LPGROUP_USERS_INFO_0 buf;
- DWORD cnt, tot, len;
+ DWORD cnt, tot;
NET_API_STATUS ret;
/* Look only on logonserver */
@@ -363,9 +363,8 @@ get_user_groups (WCHAR *logonserver, cygsidlist &grp_list,
return ret == NERR_UserNotFound || ret == ERROR_ACCESS_DENIED;
}
- len = wcslen (domain);
- wcscpy (dgroup, domain);
- dgroup[len++] = L'\\';
+ grp_p = wcpncpy (dgroup, domain, MAX_DOMAIN_NAME_LEN);
+ *grp_p++ = L'\\';
for (DWORD i = 0; i < cnt; ++i)
{
@@ -375,7 +374,8 @@ get_user_groups (WCHAR *logonserver, cygsidlist &grp_list,
DWORD dlen = sizeof (dom);
SID_NAME_USE use = SidTypeInvalid;
- wcscpy (dgroup + len, buf[i].grui0_name);
+ *wcpncpy (grp_p, buf[i].grui0_name, sizeof dgroup / sizeof *dgroup
+ - (grp_p - dgroup) - 1) = L'\0';
if (!LookupAccountNameW (NULL, dgroup, gsid, &glen, dom, &dlen, &use))
debug_printf ("LookupAccountName(%W), %E", dgroup);
else if (well_known_sid_type (use))