diff options
author | Christopher Faylor <me@cgf.cx> | 2006-03-20 01:59:23 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2006-03-20 01:59:23 +0000 |
commit | c5c3d69d8a5a3958515c3ee93024261bf8d9dd3d (patch) | |
tree | 872c7f2a933047411e05ce7725a540d7a11b6802 /winsup/cygwin/sigproc.cc | |
parent | 7d85b417f1635c44b16571a01b43dfea6f9d3d61 (diff) | |
download | cygnal-c5c3d69d8a5a3958515c3ee93024261bf8d9dd3d.tar.gz cygnal-c5c3d69d8a5a3958515c3ee93024261bf8d9dd3d.tar.bz2 cygnal-c5c3d69d8a5a3958515c3ee93024261bf8d9dd3d.zip |
* pinfo.cc (commune_process): Fix randomly invalid pointer which caused fifos
to work incorrectly.
Diffstat (limited to 'winsup/cygwin/sigproc.cc')
-rw-r--r-- | winsup/cygwin/sigproc.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index a82e90002..55fbb636d 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -679,10 +679,14 @@ sig_send (_pinfo *p, siginfo_t& si, _cygtls *tls) else { size_t n = strlen (si._si_commune._si_str); - char *p = leader = (char *) alloca (sizeof (pack) + sizeof (n) + n); - memcpy (p, &pack, sizeof (pack)); p += sizeof (pack); - memcpy (p, &n, sizeof (n)); p += sizeof (n); - memcpy (p, si._si_commune._si_str, n); p += n; + char *p = leader = (char *) alloca (sizeof (pack) + sizeof (n) + n /*DELETEME*/ + 1); + memcpy (p, &pack, sizeof (pack)); + p += sizeof (pack); + memcpy (p, &n, sizeof (n)); + p += sizeof (n); + memcpy (p, si._si_commune._si_str, n); +p[n] = '\0'; sigproc_printf ("n %d, si_str %s", n, p); + p += n; packsize = p - leader; } |