[PATCH 2/2] Cygwin: implement case-insensitive Unicode user and group name matching
Darren Tucker
dtucker at dtucker.net
Tue Mar 12 11:32:38 AEDT 2019
On Fri, Feb 22, 2019 at 10:29:46AM +0100, Corinna Vinschen wrote:
> On Feb 22 16:02, Darren Tucker wrote:
[...]
> > How's this? If we push the match_usergroup_pattern_list() function up
> > to OpenBSD it should mean most future diffs will apply cleanly.
>
> I like this a lot.
>
> But that also means the cygwin_match_pattern_list function will be
> called only for user and group names, and that in turn means the cygwin
> function is always called for case-insensitive operation.
>
> How's this? It's just tweaking your patch a bit, simplifying the Cygwin
> code.
Looks good, I've committed it. One final tweak: replace alloca with
xcalloc since it checks for integer overflow, will fail instead of blowing
the stack on large allocs and is likely at a less well-known location.
Also include stdlib.h for the prototype for free().
diff --git a/openbsd-compat/bsd-cygwin_util.c b/openbsd-compat/bsd-cygwin_util.c
index 1e4cdc92..54628e26 100644
--- a/openbsd-compat/bsd-cygwin_util.c
+++ b/openbsd-compat/bsd-cygwin_util.c
@@ -37,6 +37,7 @@
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
+#include <stdlib.h>
#include <wchar.h>
#include <wctype.h>
@@ -191,16 +192,20 @@ _match_pattern(const char *s, const char *pattern)
wchar_t *ws;
wchar_t *wpattern;
size_t len;
+ int ret;
if ((len = mbstowcs(NULL, s, 0)) < 0)
return 0;
- ws = (wchar_t *) alloca((len + 1) * sizeof (wchar_t));
+ ws = (wchar_t *) xcalloc(len + 1, sizeof (wchar_t));
mbstowcs(ws, s, len + 1);
if ((len = mbstowcs(NULL, pattern, 0)) < 0)
return 0;
- wpattern = (wchar_t *) alloca((len + 1) * sizeof (wchar_t));
+ wpattern = (wchar_t *) xcalloc(len + 1, sizeof (wchar_t));
mbstowcs(wpattern, pattern, len + 1);
- return __match_pattern (ws, wpattern);
+ ret = __match_pattern (ws, wpattern);
+ free(ws);
+ free(wpattern);
+ return ret;
}
/*
--
Darren Tucker (dtucker at dtucker.net)
GPG key 11EAA6FA / A86E 3E07 5B19 5880 E860 37F4 9357 ECEF 11EA A6FA (new)
Good judgement comes with experience. Unfortunately, the experience
usually comes from bad judgement.
More information about the openssh-unix-dev
mailing list