mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-28 08:11:05 -08:00
Backport memory fix (2014-03-22T03:04:53Z!dancol@dancol.org) from trunk
This commit is contained in:
parent
e611af505f
commit
e4e40f72f3
2 changed files with 22 additions and 4 deletions
|
|
@ -1,3 +1,9 @@
|
|||
2014-03-22 Daniel Colascione <dancol@dancol.org>
|
||||
|
||||
* process.c (conv_sockaddr_to_lisp): When extracting the string
|
||||
names of AF_LOCAL sockets, stop before reading uninitialized
|
||||
memory.
|
||||
|
||||
2014-03-23 Daniel Colascione <dancol@dancol.org>
|
||||
|
||||
* process.c (DATAGRAM_CONN_P): Don't underflow datagram_address
|
||||
|
|
|
|||
|
|
@ -2013,10 +2013,22 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len)
|
|||
case AF_LOCAL:
|
||||
{
|
||||
struct sockaddr_un *sockun = (struct sockaddr_un *) sa;
|
||||
for (i = 0; i < sizeof (sockun->sun_path); i++)
|
||||
if (sockun->sun_path[i] == 0)
|
||||
break;
|
||||
return make_unibyte_string (sockun->sun_path, i);
|
||||
ptrdiff_t name_length = len - offsetof (struct sockaddr_un, sun_path);
|
||||
/* If the first byte is NUL, the name is a Linux abstract
|
||||
socket name, and the name can contain embedded NULs. If
|
||||
it's not, we have a NUL-terminated string. Be careful not
|
||||
to walk past the end of the object looking for the name
|
||||
terminator, however. */
|
||||
if (name_length > 0 && sockun->sun_path[0] != '\0')
|
||||
{
|
||||
const char* terminator =
|
||||
memchr (sockun->sun_path, '\0', name_length);
|
||||
|
||||
if (terminator)
|
||||
name_length = terminator - (const char*) sockun->sun_path;
|
||||
}
|
||||
|
||||
return make_unibyte_string (sockun->sun_path, name_length);
|
||||
}
|
||||
#endif
|
||||
default:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue