summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2015-12-24 00:32:54 +0100
committerCorinna Vinschen <corinna@vinschen.de>2015-12-24 00:32:54 +0100
commit3b8372c1f2ce6546da1d71de2254c18482430e36 (patch)
tree9748451aad395fdb9777145adf42fee5b1f51414
parent62fe4404a70c7765973141e8921b06a03b7c1c79 (diff)
downloadcygnal-3b8372c1f2ce6546da1d71de2254c18482430e36.tar.gz
cygnal-3b8372c1f2ce6546da1d71de2254c18482430e36.tar.bz2
cygnal-3b8372c1f2ce6546da1d71de2254c18482430e36.zip
Use TLS buffer in ACL<->text conversion
* sec_acl.cc (acltotext32): Use tmp_pathbuf rather than stack buffer. (aclfromtext32): Ditto. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/sec_acl.cc10
2 files changed, 11 insertions, 4 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 5f9eacffc..c32519efe 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,10 @@
2015-12-24 Corinna Vinschen <corinna@vinschen.de>
+ * sec_acl.cc (acltotext32): Use tmp_pathbuf rather than stack buffer.
+ (aclfromtext32): Ditto.
+
+2015-12-24 Corinna Vinschen <corinna@vinschen.de>
+
* sec_acl.cc: Cosmetic changes.
2015-12-18 Corinna Vinschen <corinna@vinschen.de>
diff --git a/winsup/cygwin/sec_acl.cc b/winsup/cygwin/sec_acl.cc
index dd75e3223..348f0bc6c 100644
--- a/winsup/cygwin/sec_acl.cc
+++ b/winsup/cygwin/sec_acl.cc
@@ -1432,7 +1432,8 @@ acltotext32 (aclent_t *aclbufp, int aclcnt)
set_errno (EINVAL);
return NULL;
}
- char buf[32000];
+ tmp_pathbuf tp;
+ char *buf = tp.c_get ();
buf[0] = '\0';
bool first = true;
@@ -1502,16 +1503,17 @@ permfromstr (char *perm)
extern "C" aclent_t *
aclfromtext32 (char *acltextp, int *)
{
- if (!acltextp)
+ if (!acltextp || strlen (acltextp) > NT_MAX_PATH)
{
set_errno (EINVAL);
return NULL;
}
- char buf[strlen (acltextp) + 1];
+ tmp_pathbuf tp;
aclent_t lacl[MAX_ACL_ENTRIES];
memset (lacl, 0, sizeof lacl);
int pos = 0;
- strcpy (buf, acltextp);
+ char *buf = tp.t_get ();
+ stpcpy (buf, acltextp);
char *lasts;
cyg_ldap cldap;
for (char *c = strtok_r (buf, ",", &lasts);