1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-01 10:06:57 +03:00

* libio/fmemopen.c (fmemopen): Free stream memory in case of

invalid length [Coverity CID 106].

	* nss/nss_files/files-key.c (search): Close stream before
	successful return [Coverity CID 107].

	* io/fts.c (fts_open): Don't allocate parent if *argv==NULL
	[Coverity CID 108].

	* sunrpc/rpc_cout.c (inline_struct): Free sizestr after use
	[Coverity CID 110, 109].

	* sunrpc/rpc_scan.c (docppline): Free file string if it is not
	going to be used [Coverity CID 111].

	* sysdeps/unix/sysv/linux/getsourcefilter.c (getsourcefilter): Free
	memory if socket level value cannot be retrieved [Coverity CID 112].

	* nis/nis_clone_dir.c (nis_clone_directory): Free all memory in
	error case [Coverity CID 114].

	* nis/nis_clone_res.c (nis_clone_result): Free all memory in the
	error cases [Coverity CID 115].

	* sunrpc/rpc_parse.c (get_definition): Free defp if tok ==
	TOK_EOF [Coverity CID 116].

	* sysdeps/unix/sysv/linux/setsourcefilter.c (setsourcefilter): Free
	memory if socket level value cannot be retrieved [Coverity CID 117].

	* elf/cache.c (save_cache): Initialize pad to avoid writing
	uninitialized data to disk.

	* elf/cache.c (save_cache): Free file_entries_new [Coverity CID 118].

	* intl/finddomain.c (_nl_find_domain): Avoid strdup of expand
	locale name, use strdupa.  Remove free call [Coverity CID 119].

	* sunrpc/rpc_main.c (generate_guard): Avoid extra allocation and
	the resulting leak [Coverity CID 121].

	* sunrpc/rpc_main.c (mkfile_output): Free all allocated memory
	[Coverity CID 122].

	* sunrpc/rpc_main.c (h_output): Free guard after we are done
	[Coverity CID 123].

	* sunrpc/svc_udp.c (cache_set): Free victim if newbuf allocation
	fails [Coverity CID 126].

	* sunrpc/svc_udp.c (svcudp_enablecache): Free memory in error
	cases [Coverity CID 127].

	* nis/nis_table.c (__create_ib_request): Free ibreq in case strdup
	fails [Coverity CID 128].

	* nis/nis_getservlist.c (nis_getservlist): Free all memory in case
	of an error [Coverity CID 130, 129].

	* nis/nis_print_group_entry.c (nis_print_group_entry): If
	nis_lookup call failed, return.  Free lookup result in error
	cases [Coverity CID 131].

	* nis/nis_removemember.c (nis_removemember): Free all memory in
	error cases [Coverity CID 132].

	* nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
	Always free lookup result [Coverity CID 134].

	* nis/nss_nisplus/nisplus-ethers.c (_nss_nisplus_gethostton_r):
	Always free lookup result [Coverity CID 135].

	* nis/nss_nisplus/nisplus-ethers.c (_nss_nisplus_getntohost_r):
	Always free lookup result [Coverity CID 136].

	* nis/nss_nisplus/nisplus-network.c (_nss_nisplus_getnetbyaddr_r):
	Before retrying, free old result [Coverity CID 137].

	* nis/nss_nisplus/nisplus-publickey.c (_nss_nisplus_netname2user):
	Free res in case UID is zero [Coverity CID 138].

	* nis/ypclnt.c (yp_update): Always free master string
	[Coverity CID 140].

	* nis/nis_creategroup.c (nis_creategroup): Free all memory in
	error cases [Coverity CID 143, 142, 141].

	* nis/nss_nis/nis-publickey.c (_nss_nis_getpublickey): Free result
	if yp_match call succeeded [Coverity CID 155].

	* nis/nss_nis/nis-publickey.c (_nss_nis_getsecretkey): Free string
	allocated in yp_match at all times [Coverity CID 157, 156].

	* nscd/nscd.c (write_pid): Close stream also if writing failed
	[Coverity CID 165].

	* nis/nis_table.c (nis_add_entry): Move test for NULL parameter
	ahead of first use [Coverity CID 167].

	* nis/nss_nis/nis-alias.c (_nss_nis_getaliasbyname_r): Move test
	for NULL parameter ahead of first use [Coverity CID 168].

	* intl/finddomain.c (_nl_find_domain): We never return NULL if we
	found the locale [Coverity CID 169].

	* inet/getnameinfo.c (getnameinfo): __getservbyport_r does not set
	herrno [Coverity CID 178].

	* nis/nis_checkpoint.c (nis_checkpoint): Don't access and returned
	freed object [Coverity CID 182].
This commit is contained in:
Ulrich Drepper
2006-04-07 04:29:25 +00:00
parent 6738b3c073
commit 0292b0dd6c
32 changed files with 433 additions and 222 deletions

113
ChangeLog
View File

@ -1,3 +1,116 @@
2006-04-06 Ulrich Drepper <drepper@redhat.com>
* libio/fmemopen.c (fmemopen): Free stream memory in case of
invalid length [Coverity CID 106].
* nss/nss_files/files-key.c (search): Close stream before
successful return [Coverity CID 107].
* io/fts.c (fts_open): Don't allocate parent if *argv==NULL
[Coverity CID 108].
* sunrpc/rpc_cout.c (inline_struct): Free sizestr after use
[Coverity CID 110, 109].
* sunrpc/rpc_scan.c (docppline): Free file string if it is not
going to be used [Coverity CID 111].
* sysdeps/unix/sysv/linux/getsourcefilter.c (getsourcefilter): Free
memory if socket level value cannot be retrieved [Coverity CID 112].
* nis/nis_clone_dir.c (nis_clone_directory): Free all memory in
error case [Coverity CID 114].
* nis/nis_clone_res.c (nis_clone_result): Free all memory in the
error cases [Coverity CID 115].
* sunrpc/rpc_parse.c (get_definition): Free defp if tok ==
TOK_EOF [Coverity CID 116].
* sysdeps/unix/sysv/linux/setsourcefilter.c (setsourcefilter): Free
memory if socket level value cannot be retrieved [Coverity CID 117].
* elf/cache.c (save_cache): Initialize pad to avoid writing
uninitialized data to disk.
* elf/cache.c (save_cache): Free file_entries_new [Coverity CID 118].
* intl/finddomain.c (_nl_find_domain): Avoid strdup of expand
locale name, use strdupa. Remove free call [Coverity CID 119].
* sunrpc/rpc_main.c (generate_guard): Avoid extra allocation and
the resulting leak [Coverity CID 121].
* sunrpc/rpc_main.c (mkfile_output): Free all allocated memory
[Coverity CID 122].
* sunrpc/rpc_main.c (h_output): Free guard after we are done
[Coverity CID 123].
* sunrpc/svc_udp.c (cache_set): Free victim if newbuf allocation
fails [Coverity CID 126].
* sunrpc/svc_udp.c (svcudp_enablecache): Free memory in error
cases [Coverity CID 127].
* nis/nis_table.c (__create_ib_request): Free ibreq in case strdup
fails [Coverity CID 128].
* nis/nis_getservlist.c (nis_getservlist): Free all memory in case
of an error [Coverity CID 130, 129].
* nis/nis_print_group_entry.c (nis_print_group_entry): If
nis_lookup call failed, return. Free lookup result in error
cases [Coverity CID 131].
* nis/nis_removemember.c (nis_removemember): Free all memory in
error cases [Coverity CID 132].
* nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
Always free lookup result [Coverity CID 134].
* nis/nss_nisplus/nisplus-ethers.c (_nss_nisplus_gethostton_r):
Always free lookup result [Coverity CID 135].
* nis/nss_nisplus/nisplus-ethers.c (_nss_nisplus_getntohost_r):
Always free lookup result [Coverity CID 136].
* nis/nss_nisplus/nisplus-network.c (_nss_nisplus_getnetbyaddr_r):
Before retrying, free old result [Coverity CID 137].
* nis/nss_nisplus/nisplus-publickey.c (_nss_nisplus_netname2user):
Free res in case UID is zero [Coverity CID 138].
* nis/ypclnt.c (yp_update): Always free master string
[Coverity CID 140].
* nis/nis_creategroup.c (nis_creategroup): Free all memory in
error cases [Coverity CID 143, 142, 141].
* nis/nss_nis/nis-publickey.c (_nss_nis_getpublickey): Free result
if yp_match call succeeded [Coverity CID 155].
* nis/nss_nis/nis-publickey.c (_nss_nis_getsecretkey): Free string
allocated in yp_match at all times [Coverity CID 157, 156].
* nscd/nscd.c (write_pid): Close stream also if writing failed
[Coverity CID 165].
* nis/nis_table.c (nis_add_entry): Move test for NULL parameter
ahead of first use [Coverity CID 167].
* nis/nss_nis/nis-alias.c (_nss_nis_getaliasbyname_r): Move test
for NULL parameter ahead of first use [Coverity CID 168].
* intl/finddomain.c (_nl_find_domain): We never return NULL if we
found the locale [Coverity CID 169].
* inet/getnameinfo.c (getnameinfo): __getservbyport_r does not set
herrno [Coverity CID 178].
* nis/nis_checkpoint.c (nis_checkpoint): Don't access and returned
freed object [Coverity CID 182].
2006-04-05 Alan Modra <amodra@bigpond.net.au> 2006-04-05 Alan Modra <amodra@bigpond.net.au>
Jakub Jelinek <jakub@redhat.com> Jakub Jelinek <jakub@redhat.com>

View File

@ -1,5 +1,4 @@
/* Copyright (C) 1999,2000,2001,2002,2003,2005 /* Copyright (C) 1999-2003,2005,2006 Free Software Foundation, Inc.
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Andreas Jaeger <aj@suse.de>, 1999. Contributed by Andreas Jaeger <aj@suse.de>, 1999.
@ -430,6 +429,7 @@ save_cache (const char *cache_name)
if (opt_format != 2) if (opt_format != 2)
{ {
char zero[pad]; char zero[pad];
memset (zero, '\0', pad);
if (write (fd, zero, pad) != (ssize_t) pad) if (write (fd, zero, pad) != (ssize_t) pad)
error (EXIT_FAILURE, errno, _("Writing of cache data failed")); error (EXIT_FAILURE, errno, _("Writing of cache data failed"));
} }
@ -455,6 +455,7 @@ save_cache (const char *cache_name)
cache_name); cache_name);
/* Free all allocated memory. */ /* Free all allocated memory. */
free (file_entries_new);
free (file_entries); free (file_entries);
free (strings); free (strings);

View File

@ -403,26 +403,17 @@ getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
if (!(flags & NI_NUMERICSERV)) if (!(flags & NI_NUMERICSERV))
{ {
struct servent *s, ts; struct servent *s, ts;
while (__getservbyport_r (((const struct sockaddr_in *) sa)->sin_port, int e;
((flags & NI_DGRAM) ? "udp" : "tcp"), while ((e = __getservbyport_r (((const struct sockaddr_in *) sa)->sin_port,
&ts, tmpbuf, tmpbuflen, &s)) ((flags & NI_DGRAM)
? "udp" : "tcp"),
&ts, tmpbuf, tmpbuflen, &s)))
{ {
if (herrno == NETDB_INTERNAL) if (e == ERANGE)
{ tmpbuf = extend_alloca (tmpbuf, tmpbuflen, 2 * tmpbuflen);
if (errno == ERANGE)
tmpbuf = extend_alloca (tmpbuf, tmpbuflen,
2 * tmpbuflen);
else else
{
__set_errno (serrno);
return EAI_SYSTEM;
}
}
else
{
break; break;
} }
}
if (s) if (s)
{ {
strncpy (serv, s->s_name, servlen); strncpy (serv, s->s_name, servlen);

View File

@ -1,5 +1,5 @@
/* Handle list of needed message catalogs /* Handle list of needed message catalogs
Copyright (C) 1995-1999, 2000, 2001, 2002, 2004 Copyright (C) 1995-1999, 2000, 2001, 2002, 2004, 2006
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Written by Ulrich Drepper <drepper@gnu.org>, 1995. Written by Ulrich Drepper <drepper@gnu.org>, 1995.
@ -110,7 +110,7 @@ _nl_find_domain (dirname, locale, domainname, domainbinding)
break; break;
} }
return cnt >= 0 ? retval : NULL; return retval;
/* NOTREACHED */ /* NOTREACHED */
} }
@ -119,20 +119,7 @@ _nl_find_domain (dirname, locale, domainname, domainbinding)
done. */ done. */
alias_value = _nl_expand_alias (locale); alias_value = _nl_expand_alias (locale);
if (alias_value != NULL) if (alias_value != NULL)
{ locale = strdupa (alias_value);
#if defined _LIBC || defined HAVE_STRDUP
locale = strdup (alias_value);
if (locale == NULL)
return NULL;
#else
size_t len = strlen (alias_value) + 1;
locale = (char *) malloc (len);
if (locale == NULL)
return NULL;
memcpy (locale, alias_value, len);
#endif
}
/* Now we determine the single parts of the locale name. First /* Now we determine the single parts of the locale name. First
look for the language. Termination symbols are `_' and `@' if look for the language. Termination symbols are `_' and `@' if
@ -169,10 +156,6 @@ _nl_find_domain (dirname, locale, domainname, domainbinding)
} }
} }
/* The room for an alias was dynamically allocated. Free it now. */
if (alias_value != NULL)
free (locale);
/* The space for normalized_codeset is dynamically allocated. Free it. */ /* The space for normalized_codeset is dynamically allocated. Free it. */
if (mask & XPG_NORM_CODESET) if (mask & XPG_NORM_CODESET)
free ((void *) normalized_codeset); free ((void *) normalized_codeset);

View File

@ -93,7 +93,8 @@ fts_open(argv, options, compar)
register FTS *sp; register FTS *sp;
register FTSENT *p, *root; register FTSENT *p, *root;
register int nitems; register int nitems;
FTSENT *parent, *tmp; FTSENT *parent = NULL;
FTSENT *tmp;
/* Options check. */ /* Options check. */
if (options & ~FTS_OPTIONMASK) { if (options & ~FTS_OPTIONMASK) {
@ -124,9 +125,11 @@ fts_open(argv, options, compar)
goto mem1; goto mem1;
/* Allocate/initialize root's parent. */ /* Allocate/initialize root's parent. */
if (*argv != NULL) {
if ((parent = fts_alloc(sp, "", 0)) == NULL) if ((parent = fts_alloc(sp, "", 0)) == NULL)
goto mem2; goto mem2;
parent->fts_level = FTS_ROOTPARENTLEVEL; parent->fts_level = FTS_ROOTPARENTLEVEL;
}
/* Allocate/initialize root(s). */ /* Allocate/initialize root(s). */
for (root = NULL, nitems = 0; *argv != NULL; ++argv, ++nitems) { for (root = NULL, nitems = 0; *argv != NULL; ++argv, ++nitems) {

View File

@ -1,5 +1,5 @@
/* Fmemopen implementation. /* Fmemopen implementation.
Copyright (C) 2000, 2002, 2005 Free Software Foundation, Inc. Copyright (C) 2000, 2002, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Hanno Mueller, kontakt@hanno.de, 2000. Contributed by Hanno Mueller, kontakt@hanno.de, 2000.
@ -202,7 +202,7 @@ fmemopen (void *buf, size_t len, const char *mode)
cookie_io_functions_t iof; cookie_io_functions_t iof;
fmemopen_cookie_t *c; fmemopen_cookie_t *c;
if (len == 0) if (__builtin_expect (len == 0, 0))
{ {
einval: einval:
__set_errno (EINVAL); __set_errno (EINVAL);
@ -227,8 +227,11 @@ fmemopen (void *buf, size_t len, const char *mode)
} }
else else
{ {
if ((uintptr_t) len > -(uintptr_t) buf) if (__builtin_expect ((uintptr_t) len > -(uintptr_t) buf, 0))
{
free (c);
goto einval; goto einval;
}
c->buffer = buf; c->buffer = buf;
} }

View File

@ -1,4 +1,4 @@
/* Copyright (c) 1997, 1998, 1999 Free Software Foundation, Inc. /* Copyright (c) 1997, 1998, 1999, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
@ -48,7 +48,6 @@ nis_checkpoint(const_nis_name dirname)
if (__type_of (NIS_RES_OBJECT (res2)) != NIS_DIRECTORY_OBJ) if (__type_of (NIS_RES_OBJECT (res2)) != NIS_DIRECTORY_OBJ)
{ {
nis_freeresult (res2); nis_freeresult (res2);
nis_freeresult (res);
NIS_RES_STATUS (res) = NIS_INVALIDOBJ; NIS_RES_STATUS (res) = NIS_INVALIDOBJ;
return res; return res;
} }

View File

@ -1,4 +1,4 @@
/* Copyright (c) 1997, 1998, 2005 Free Software Foundation, Inc. /* Copyright (c) 1997, 1998, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
@ -29,15 +29,24 @@ nis_clone_directory (const directory_obj *src, directory_obj *dest)
char *addr; char *addr;
unsigned int size; unsigned int size;
XDR xdrs; XDR xdrs;
directory_obj *res;
if (src == NULL) if (src == NULL)
return (NULL); return NULL;
size = xdr_sizeof ((xdrproc_t)_xdr_directory_obj, (char *)src); size = xdr_sizeof ((xdrproc_t)_xdr_directory_obj, (char *)src);
if ((addr = calloc(1, size)) == NULL) if ((addr = calloc(1, size)) == NULL)
return NULL; return NULL;
xdrmem_create(&xdrs, addr, size, XDR_ENCODE);
if (!_xdr_directory_obj (&xdrs, (directory_obj *)src))
{
xdr_destroy (&xdrs);
free (addr);
return NULL;
}
xdr_destroy (&xdrs);
directory_obj *res;
if (dest == NULL) if (dest == NULL)
{ {
if ((res = calloc (1, sizeof (directory_obj))) == NULL) if ((res = calloc (1, sizeof (directory_obj))) == NULL)
@ -49,18 +58,12 @@ nis_clone_directory (const directory_obj *src, directory_obj *dest)
else else
res = dest; res = dest;
xdrmem_create(&xdrs, addr, size, XDR_ENCODE);
if (!_xdr_directory_obj (&xdrs, (directory_obj *)src))
{
xdr_destroy (&xdrs);
free (addr);
return NULL;
}
xdr_destroy (&xdrs);
xdrmem_create (&xdrs, addr, size, XDR_DECODE); xdrmem_create (&xdrs, addr, size, XDR_DECODE);
if (!_xdr_directory_obj (&xdrs, res)) if (!_xdr_directory_obj (&xdrs, res))
{ {
xdr_destroy (&xdrs); xdr_destroy (&xdrs);
if (res != dest)
free (res);
free (addr); free (addr);
return NULL; return NULL;
} }

View File

@ -1,4 +1,4 @@
/* Copyright (c) 1997, 1998, 2005 Free Software Foundation, Inc. /* Copyright (c) 1997, 1998, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
@ -29,7 +29,6 @@ nis_clone_result (const nis_result *src, nis_result *dest)
char *addr; char *addr;
unsigned int size; unsigned int size;
XDR xdrs; XDR xdrs;
nis_result *res;
if (src == NULL) if (src == NULL)
return (NULL); return (NULL);
@ -38,6 +37,16 @@ nis_clone_result (const nis_result *src, nis_result *dest)
if ((addr = calloc(1, size)) == NULL) if ((addr = calloc(1, size)) == NULL)
return NULL; return NULL;
xdrmem_create (&xdrs, addr, size, XDR_ENCODE);
if (!_xdr_nis_result (&xdrs, (nis_result *)src))
{
xdr_destroy (&xdrs);
free (addr);
return NULL;
}
xdr_destroy (&xdrs);
nis_result *res;
if (dest == NULL) if (dest == NULL)
{ {
if ((res = calloc (1, sizeof (nis_result))) == NULL) if ((res = calloc (1, sizeof (nis_result))) == NULL)
@ -49,18 +58,12 @@ nis_clone_result (const nis_result *src, nis_result *dest)
else else
res = dest; res = dest;
xdrmem_create(&xdrs, addr, size, XDR_ENCODE);
if (!_xdr_nis_result (&xdrs, (nis_result *)src))
{
xdr_destroy (&xdrs);
free (addr);
return NULL;
}
xdr_destroy (&xdrs);
xdrmem_create (&xdrs, addr, size, XDR_DECODE); xdrmem_create (&xdrs, addr, size, XDR_DECODE);
if (!_xdr_nis_result (&xdrs, res)) if (!_xdr_nis_result (&xdrs, res))
{ {
xdr_destroy (&xdrs); xdr_destroy (&xdrs);
if (res != dest)
free (res);
free (addr); free (addr);
return NULL; return NULL;
} }

View File

@ -1,4 +1,4 @@
/* Copyright (c) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. /* Copyright (c) 1997, 1998, 1999, 2000, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
@ -46,7 +46,7 @@ nis_creategroup (const_nis_name group, unsigned int flags)
else else
return NIS_BADNAME; return NIS_BADNAME;
obj = malloc (sizeof (nis_object)); obj = calloc (1, sizeof (nis_object));
if (__builtin_expect (obj == NULL, 0)) if (__builtin_expect (obj == NULL, 0))
return NIS_NOMEMORY; return NIS_NOMEMORY;
@ -57,7 +57,13 @@ nis_creategroup (const_nis_name group, unsigned int flags)
obj->zo_domain = strdup (domainbuf); obj->zo_domain = strdup (domainbuf);
if (obj->zo_name == NULL || obj->zo_owner == NULL if (obj->zo_name == NULL || obj->zo_owner == NULL
|| obj->zo_group == NULL || obj->zo_domain == NULL) || obj->zo_group == NULL || obj->zo_domain == NULL)
{
free (obj->zo_group);
free (obj->zo_owner);
free (obj->zo_name);
free (obj);
return NIS_NOMEMORY; return NIS_NOMEMORY;
}
obj->zo_access = __nis_default_access (NULL, 0); obj->zo_access = __nis_default_access (NULL, 0);
obj->zo_ttl = 60 * 60; obj->zo_ttl = 60 * 60;
obj->zo_data.zo_type = NIS_GROUP_OBJ; obj->zo_data.zo_type = NIS_GROUP_OBJ;
@ -66,11 +72,11 @@ nis_creategroup (const_nis_name group, unsigned int flags)
obj->zo_data.objdata_u.gr_data.gr_members.gr_members_val = NULL; obj->zo_data.objdata_u.gr_data.gr_members.gr_members_val = NULL;
res = nis_add (buf, obj); res = nis_add (buf, obj);
nis_free_object (obj);
if (res == NULL) if (res == NULL)
return NIS_NOMEMORY; return NIS_NOMEMORY;
status = NIS_RES_STATUS (res); status = NIS_RES_STATUS (res);
nis_freeresult (res); nis_freeresult (res);
nis_free_object (obj);
return status; return status;
} }

View File

@ -1,4 +1,4 @@
/* Copyright (c) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. /* Copyright (c) 1997, 1998, 1999, 2000, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
@ -40,7 +40,10 @@ nis_getservlist (const_nis_name dir)
malloc (sizeof (nis_server *) * malloc (sizeof (nis_server *) *
(NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_len + 1)); (NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_len + 1));
if (__builtin_expect (serv == NULL, 0)) if (__builtin_expect (serv == NULL, 0))
{
nis_freeresult (res);
return NULL; return NULL;
}
for (i = 0; i < NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_len; for (i = 0; i < NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_len;
++i) ++i)
@ -49,13 +52,37 @@ nis_getservlist (const_nis_name dir)
&NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_val[i]; &NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_val[i];
serv[i] = calloc (1, sizeof (nis_server)); serv[i] = calloc (1, sizeof (nis_server));
if (__builtin_expect (serv[i] == NULL, 0)) if (__builtin_expect (serv[i] == NULL, 0))
{
free_all:
while (i-- > 0)
{
free (serv[i]->pkey.n_bytes);
if (serv[i]->ep.ep_val != NULL)
{
unsigned long int j;
for (j = 0; j < serv[i]->ep.ep_len; ++j)
{
free (serv[i]->ep.ep_val[j].proto);
free (serv[i]->ep.ep_val[j].family);
free (serv[i]->ep.ep_val[j].uaddr);
}
free (serv[i]->ep.ep_val);
}
free (serv[i]->name);
free (serv[i]);
}
return NULL; return NULL;
}
if (server->name != NULL) if (server->name != NULL)
{ {
serv[i]->name = strdup (server->name); serv[i]->name = strdup (server->name);
if (__builtin_expect (serv[i]->name == NULL, 0)) if (__builtin_expect (serv[i]->name == NULL, 0))
return NULL; {
++i;
goto free_all;
}
} }
serv[i]->ep.ep_len = server->ep.ep_len; serv[i]->ep.ep_len = server->ep.ep_len;
@ -66,7 +93,10 @@ nis_getservlist (const_nis_name dir)
serv[i]->ep.ep_val = serv[i]->ep.ep_val =
malloc (server->ep.ep_len * sizeof (endpoint)); malloc (server->ep.ep_len * sizeof (endpoint));
if (__builtin_expect (serv[i]->ep.ep_val == NULL, 0)) if (__builtin_expect (serv[i]->ep.ep_val == NULL, 0))
return NULL; {
++i;
goto free_all;
}
for (j = 0; j < serv[i]->ep.ep_len; ++j) for (j = 0; j < serv[i]->ep.ep_len; ++j)
{ {
@ -87,20 +117,20 @@ nis_getservlist (const_nis_name dir)
serv[i]->ep.ep_val[j].proto = NULL; serv[i]->ep.ep_val[j].proto = NULL;
} }
} }
else
serv[i]->ep.ep_val = NULL;
serv[i]->key_type = server->key_type; serv[i]->key_type = server->key_type;
serv[i]->pkey.n_len = server->pkey.n_len; serv[i]->pkey.n_len = server->pkey.n_len;
if (server->pkey.n_len > 0) if (server->pkey.n_len > 0)
{ {
serv[i]->pkey.n_bytes = malloc (server->pkey.n_len); serv[i]->pkey.n_bytes = malloc (server->pkey.n_len);
if (__builtin_expect (serv[i]->pkey.n_bytes == NULL, 0)) if (__builtin_expect (serv[i]->pkey.n_bytes == NULL, 0))
return NULL; {
++i;
goto free_all;
}
memcpy (serv[i]->pkey.n_bytes, server->pkey.n_bytes, memcpy (serv[i]->pkey.n_bytes, server->pkey.n_bytes,
server->pkey.n_len); server->pkey.n_len);
} }
else
serv[i]->pkey.n_bytes = NULL;
} }
serv[i] = NULL; serv[i] = NULL;
} }

View File

@ -1,4 +1,4 @@
/* Copyright (c) 1997, 1998, 2000, 2004 Free Software Foundation, Inc. /* Copyright (c) 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
@ -45,12 +45,16 @@ nis_print_group_entry (const_nis_name group)
} }
res = nis_lookup (buf, FOLLOW_LINKS | EXPAND_NAME); res = nis_lookup (buf, FOLLOW_LINKS | EXPAND_NAME);
if (NIS_RES_STATUS(res) != NIS_SUCCESS) if (res == NULL)
return; return;
if ((NIS_RES_NUMOBJ (res) != 1) || if (NIS_RES_STATUS (res) != NIS_SUCCESS
(__type_of (NIS_RES_OBJECT (res)) != NIS_GROUP_OBJ)) || NIS_RES_NUMOBJ (res) != 1
|| __type_of (NIS_RES_OBJECT (res)) != NIS_GROUP_OBJ)
{
nis_freeresult (res);
return; return;
}
char *mem_exp[NIS_RES_NUMOBJ (res)]; char *mem_exp[NIS_RES_NUMOBJ (res)];
char *mem_imp[NIS_RES_NUMOBJ (res)]; char *mem_imp[NIS_RES_NUMOBJ (res)];

View File

@ -1,4 +1,4 @@
/* Copyright (c) 1997, 1998, 1999, 2004, 2005 Free Software Foundation, Inc. /* Copyright (c) 1997,1998,1999,2004,2005,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
@ -68,7 +68,10 @@ nis_removemember (const_nis_name member, const_nis_name group)
calloc (NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_len, calloc (NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_len,
sizeof (char *)); sizeof (char *));
if (newmem == NULL) if (newmem == NULL)
{
nis_freeresult (res);
return NIS_NOMEMORY; return NIS_NOMEMORY;
}
k = NIS_RES_OBJECT (res)[0].GR_data.gr_members.gr_members_len; k = NIS_RES_OBJECT (res)[0].GR_data.gr_members.gr_members_len;
j = 0; j = 0;
@ -96,6 +99,7 @@ nis_removemember (const_nis_name member, const_nis_name group)
if (newp == NULL) if (newp == NULL)
{ {
free (newmem); free (newmem);
nis_freeresult (res);
return NIS_NOMEMORY; return NIS_NOMEMORY;
} }
newmem = newp; newmem = newp;

View File

@ -1,4 +1,4 @@
/* Copyright (c) 1997,1998,1999,2003,2004,2005 Free Software Foundation, Inc. /* Copyright (c) 1997-1999,2003,2004,2005,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
@ -41,7 +41,15 @@ __create_ib_request (const_nis_name name, unsigned int flags)
/* Not of "[key=value,key=value,...],foo.." format? */ /* Not of "[key=value,key=value,...],foo.." format? */
if (cptr[0] != '[') if (cptr[0] != '[')
return (ibreq->ibr_name = strdup (cptr)) == NULL ? NULL : ibreq; {
ibreq->ibr_name = strdup (cptr);
if (ibreq->ibr_name == NULL)
{
free (ibreq);
return NULL;
}
return ibreq;
}
/* "[key=value,...],foo" format */ /* "[key=value,...],foo" format */
ibreq->ibr_name = strchr (cptr, ']'); ibreq->ibr_name = strchr (cptr, ']');
@ -497,15 +505,7 @@ libnsl_hidden_def (nis_list)
nis_result * nis_result *
nis_add_entry (const_nis_name name, const nis_object *obj2, unsigned int flags) nis_add_entry (const_nis_name name, const nis_object *obj2, unsigned int flags)
{ {
nis_object obj; nis_result *res = calloc (1, sizeof (nis_result));
nis_result *res;
nis_error status;
ib_request *ibreq;
size_t namelen = strlen (name);
char buf1[namelen + 20];
char buf4[namelen + 20];
res = calloc (1, sizeof (nis_result));
if (res == NULL) if (res == NULL)
return NULL; return NULL;
@ -515,12 +515,18 @@ nis_add_entry (const_nis_name name, const nis_object *obj2, unsigned int flags)
return res; return res;
} }
if ((ibreq = __create_ib_request (name, flags)) == NULL) size_t namelen = strlen (name);
char buf1[namelen + 20];
char buf4[namelen + 20];
ib_request *ibreq = __create_ib_request (name, flags);
if (ibreq == NULL)
{ {
NIS_RES_STATUS (res) = NIS_BADNAME; NIS_RES_STATUS (res) = NIS_BADNAME;
return res; return res;
} }
nis_object obj;
memcpy (&obj, obj2, sizeof (nis_object)); memcpy (&obj, obj2, sizeof (nis_object));
if (obj.zo_name == NULL || strlen (obj.zo_name) == 0) if (obj.zo_name == NULL || strlen (obj.zo_name) == 0)
@ -543,11 +549,12 @@ nis_add_entry (const_nis_name name, const nis_object *obj2, unsigned int flags)
} }
ibreq->ibr_obj.ibr_obj_len = 1; ibreq->ibr_obj.ibr_obj_len = 1;
if ((status = __do_niscall (ibreq->ibr_name, NIS_IBADD, nis_error status = __do_niscall (ibreq->ibr_name, NIS_IBADD,
(xdrproc_t) _xdr_ib_request, (xdrproc_t) _xdr_ib_request,
(caddr_t) ibreq, (caddr_t) ibreq,
(xdrproc_t) _xdr_nis_result, (xdrproc_t) _xdr_nis_result,
(caddr_t) res, 0, NULL)) != NIS_SUCCESS) (caddr_t) res, 0, NULL);
if (status != NIS_SUCCESS)
NIS_RES_STATUS (res) = status; NIS_RES_STATUS (res) = status;
nis_free_request (ibreq); nis_free_request (ibreq);

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1996-2002, 2003 Free Software Foundation, Inc. /* Copyright (C) 1996-2002, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
@ -206,32 +206,29 @@ enum nss_status
_nss_nis_getaliasbyname_r (const char *name, struct aliasent *alias, _nss_nis_getaliasbyname_r (const char *name, struct aliasent *alias,
char *buffer, size_t buflen, int *errnop) char *buffer, size_t buflen, int *errnop)
{ {
enum nss_status retval;
int parse_res;
char *domain;
char *result;
int len;
char *p;
size_t namlen = strlen (name);
char name2[namlen + 1];
size_t i;
if (name == NULL) if (name == NULL)
{ {
*errnop = EINVAL; *errnop = EINVAL;
return NSS_STATUS_UNAVAIL; return NSS_STATUS_UNAVAIL;
} }
size_t namlen = strlen (name);
char name2[namlen + 1];
char *domain;
if (yp_get_default_domain (&domain)) if (yp_get_default_domain (&domain))
return NSS_STATUS_UNAVAIL; return NSS_STATUS_UNAVAIL;
/* Convert name to lowercase. */ /* Convert name to lowercase. */
size_t i;
for (i = 0; i < namlen; ++i) for (i = 0; i < namlen; ++i)
name2[i] = _tolower (name[i]); name2[i] = _tolower (name[i]);
name2[i] = '\0'; name2[i] = '\0';
retval = yperr2nss (yp_match (domain, "mail.aliases", name2, namlen, char *result;
&result, &len)); int len;
enum nss_status retval = yperr2nss (yp_match (domain, "mail.aliases", name2,
namlen, &result, &len));
if (retval != NSS_STATUS_SUCCESS) if (retval != NSS_STATUS_SUCCESS)
{ {
@ -247,14 +244,15 @@ _nss_nis_getaliasbyname_r (const char *name, struct aliasent *alias,
return NSS_STATUS_TRYAGAIN; return NSS_STATUS_TRYAGAIN;
} }
p = strncpy (buffer, result, len); char *p = strncpy (buffer, result, len);
buffer[len] = '\0'; buffer[len] = '\0';
while (isspace (*p)) while (isspace (*p))
++p; ++p;
free (result); free (result);
alias->alias_local = 0; alias->alias_local = 0;
parse_res = _nss_nis_parse_aliasent (name, p, alias, buffer, buflen, errnop); int parse_res = _nss_nis_parse_aliasent (name, p, alias, buffer, buflen,
errnop);
if (parse_res < 1) if (parse_res < 1)
{ {
if (parse_res == -1) if (parse_res == -1)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1996-1999,2001,2002,2005 Free Software Foundation, Inc. /* Copyright (C) 1996-1999,2001,2002,2005,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996.
@ -73,6 +73,7 @@ _nss_nis_getpublickey (const char *netname, char *pkey, int *errnop)
*p = 0; *p = 0;
strncpy (pkey, result, HEXKEYBYTES + 1); strncpy (pkey, result, HEXKEYBYTES + 1);
pkey[HEXKEYBYTES] = '\0'; pkey[HEXKEYBYTES] = '\0';
free (result);
} }
return NSS_STATUS_SUCCESS; return NSS_STATUS_SUCCESS;
} }
@ -115,21 +116,21 @@ _nss_nis_getsecretkey (const char *netname, char *skey, char *passwd,
if (result != NULL) if (result != NULL)
{ {
char *p = strchr (result, ':'); char *p = strchr (result, ':');
if (p == NULL) if (p != NULL)
return NSS_STATUS_SUCCESS; {
++p; ++p;
strncpy (buf, p, 2 * (HEXKEYBYTES + 1)); strncpy (buf, p, 2 * (HEXKEYBYTES + 1));
buf[2 * HEXKEYBYTES + 1] = '\0'; buf[2 * HEXKEYBYTES + 1] = '\0';
if (!xdecrypt (buf, passwd)) if (xdecrypt (buf, passwd)
return NSS_STATUS_SUCCESS; && memcmp (buf, &(buf[HEXKEYBYTES]), KEYCHECKSUMSIZE) == 0)
{
if (memcmp (buf, &(buf[HEXKEYBYTES]), KEYCHECKSUMSIZE) != 0)
return NSS_STATUS_SUCCESS;
buf[HEXKEYBYTES] = '\0'; buf[HEXKEYBYTES] = '\0';
strcpy (skey, buf); strcpy (skey, buf);
} }
}
free (result);
}
return NSS_STATUS_SUCCESS; return NSS_STATUS_SUCCESS;
} }

View File

@ -304,10 +304,18 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
} }
if (__builtin_expect (niserr2nss (result->status) != NSS_STATUS_SUCCESS, 0)) if (__builtin_expect (niserr2nss (result->status) != NSS_STATUS_SUCCESS, 0))
return niserr2nss (result->status); {
enum nss_status status = niserr2nss (result->status);
nis_freeresult (result);
return status;
}
parse_res = _nss_nisplus_parse_aliasent (result, 0, alias, parse_res = _nss_nisplus_parse_aliasent (result, 0, alias,
buffer, buflen, errnop); buffer, buflen, errnop);
/* We do not need the lookup result anymore. */
nis_freeresult (result);
if (__builtin_expect (parse_res < 1, 0)) if (__builtin_expect (parse_res < 1, 0))
{ {
__set_errno (olderr); __set_errno (olderr);

View File

@ -261,16 +261,17 @@ _nss_nisplus_gethostton_r (const char *name, struct etherent *eth,
int parse_res = _nss_nisplus_parse_etherent (result, eth, buffer, int parse_res = _nss_nisplus_parse_etherent (result, eth, buffer,
buflen, errnop); buflen, errnop);
/* We do not need the lookup result anymore. */
nis_freeresult (result);
if (__builtin_expect (parse_res < 1, 0)) if (__builtin_expect (parse_res < 1, 0))
{ {
__set_errno (olderr); __set_errno (olderr);
if (parse_res == -1) if (parse_res == -1)
{
nis_freeresult (result);
return NSS_STATUS_TRYAGAIN; return NSS_STATUS_TRYAGAIN;
}
else
return NSS_STATUS_NOTFOUND; return NSS_STATUS_NOTFOUND;
} }
@ -326,13 +327,14 @@ _nss_nisplus_getntohost_r (const struct ether_addr *addr, struct etherent *eth,
int parse_res = _nss_nisplus_parse_etherent (result, eth, buffer, int parse_res = _nss_nisplus_parse_etherent (result, eth, buffer,
buflen, errnop); buflen, errnop);
/* We do not need the lookup result anymore. */
nis_freeresult (result);
if (__builtin_expect (parse_res < 1, 0)) if (__builtin_expect (parse_res < 1, 0))
{ {
if (parse_res == -1) if (parse_res == -1)
{
nis_freeresult (result);
return NSS_STATUS_TRYAGAIN; return NSS_STATUS_TRYAGAIN;
}
return NSS_STATUS_NOTFOUND; return NSS_STATUS_NOTFOUND;
} }

View File

@ -443,6 +443,7 @@ _nss_nisplus_getnetbyaddr_r (uint32_t addr, const int type,
removed (one by one) */ removed (one by one) */
buf2[b2len - 2] = '\0'; buf2[b2len - 2] = '\0';
b2len -= 2; b2len -= 2;
nis_freeresult (result);
continue; continue;
} }

View File

@ -1,4 +1,4 @@
/* Copyright (c) 1997, 1999, 2001, 2003, 2005 Free Software Foundation, Inc. /* Copyright (c) 1997,1999,2001,2003,2005,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
@ -394,6 +394,7 @@ _nss_nisplus_netname2user (char netname[MAXNETNAMELEN + 1], uid_t *uidp,
if (*uidp == 0) if (*uidp == 0)
{ {
syslog (LOG_ERR, _("netname2user: should not have uid 0")); syslog (LOG_ERR, _("netname2user: should not have uid 0"));
nis_freeresult (res);
return NSS_STATUS_NOTFOUND; return NSS_STATUS_NOTFOUND;
} }

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1996-2001, 2002, 2003, 2004, 2005 /* Copyright (C) 1996-2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996.
@ -955,16 +955,22 @@ yp_update (char *domain, char *map, unsigned ypop,
args.update_args.datum.yp_buf_len = datalen; args.update_args.datum.yp_buf_len = datalen;
args.update_args.datum.yp_buf_val = data; args.update_args.datum.yp_buf_val = data;
if ((r = yp_master (domain, map, &master)) != 0) if ((r = yp_master (domain, map, &master)) != YPERR_SUCCESS)
return r; return r;
if (!host2netname (servername, master, domain)) if (!host2netname (servername, master, domain))
{ {
fputs (_("yp_update: cannot convert host to netname\n"), stderr); fputs (_("yp_update: cannot convert host to netname\n"), stderr);
free (master);
return YPERR_YPERR; return YPERR_YPERR;
} }
if ((clnt = clnt_create (master, YPU_PROG, YPU_VERS, "tcp")) == NULL) clnt = clnt_create (master, YPU_PROG, YPU_VERS, "tcp");
/* We do not need the string anymore. */
free (master);
if (clnt == NULL)
{ {
clnt_pcreateerror ("yp_update: clnt_create"); clnt_pcreateerror ("yp_update: clnt_create");
return YPERR_RPC; return YPERR_RPC;

View File

@ -1,3 +1,8 @@
2006-04-06 Ulrich Drepper <drepper@redhat.com>
* pthread_getattr_np.c (pthread_getattr_np): Close fp if getrlimit
fails [Coverity CID 105].
2006-04-05 Ulrich Drepper <drepper@redhat.com> 2006-04-05 Ulrich Drepper <drepper@redhat.com>
* sysdeps/pthread/pthread.h: Add nonnull attributes. * sysdeps/pthread/pthread.h: Add nonnull attributes.

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. /* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -83,7 +83,9 @@ pthread_getattr_np (thread_id, attr)
if (fp == NULL) if (fp == NULL)
ret = errno; ret = errno;
/* We need the limit of the stack in any case. */ /* We need the limit of the stack in any case. */
else if (getrlimit (RLIMIT_STACK, &rl) != 0) else
{
if (getrlimit (RLIMIT_STACK, &rl) != 0)
ret = errno; ret = errno;
else else
{ {
@ -126,9 +128,11 @@ pthread_getattr_np (thread_id, attr)
last_to = to; last_to = to;
} }
fclose (fp);
free (line); free (line);
} }
fclose (fp);
}
} }
iattr->flags |= ATTR_FLAG_STACKADDR; iattr->flags |= ATTR_FLAG_STACKADDR;

View File

@ -487,10 +487,10 @@ write_pid (const char *file)
return -1; return -1;
fprintf (fp, "%d\n", getpid ()); fprintf (fp, "%d\n", getpid ());
if (fflush (fp) || ferror (fp))
return -1; int result = fflush (fp) || ferror (fp) ? -1 : 0;
fclose (fp); fclose (fp);
return 0; return result;
} }

View File

@ -1,5 +1,5 @@
/* Public key file parser in nss_files module. /* Public key file parser in nss_files module.
Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. Copyright (C) 1996, 1997, 1998, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -78,6 +78,7 @@ search (const char *netname, char *result, int *errnop, int secret)
p = __strtok_r (NULL, ":\n", &save_ptr); p = __strtok_r (NULL, ":\n", &save_ptr);
if (p == NULL) /* malformed line? */ if (p == NULL) /* malformed line? */
continue; continue;
fclose (stream);
strcpy (result, p); strcpy (result, p);
return NSS_STATUS_SUCCESS; return NSS_STATUS_SUCCESS;
} }

View File

@ -551,6 +551,7 @@ inline_struct (definition *def, int flag)
} }
size = 0; size = 0;
i = 0; i = 0;
free (sizestr);
sizestr = NULL; sizestr = NULL;
print_stat (indent + 1, &dl->decl); print_stat (indent + 1, &dl->decl);
} }

View File

@ -531,7 +531,7 @@ generate_guard (const char *pathname)
filename = strrchr (pathname, '/'); /* find last component */ filename = strrchr (pathname, '/'); /* find last component */
filename = ((filename == NULL) ? pathname : filename + 1); filename = ((filename == NULL) ? pathname : filename + 1);
guard = strdup (filename); guard = extendfile (filename, "_H_RPCGEN");
/* convert to upper case */ /* convert to upper case */
tmp = guard; tmp = guard;
while (*tmp) while (*tmp)
@ -541,7 +541,6 @@ generate_guard (const char *pathname)
tmp++; tmp++;
} }
guard = extendfile (guard, "_H_RPCGEN");
return guard; return guard;
} }
@ -661,6 +660,7 @@ h_output (const char *infile, const char *define, int extend,
} }
fprintf (fout, "\n#endif /* !_%s */\n", guard); fprintf (fout, "\n#endif /* !_%s */\n", guard);
free (guard);
close_input (); close_input ();
close_output (outfilename); close_output (outfilename);
} }
@ -946,6 +946,8 @@ clnt_output (const char *infile, const char *define, int extend,
close_output (outfilename); close_output (outfilename);
} }
static const char space[] = " ";
static char * static char *
file_name (const char *file, const char *ext) file_name (const char *file, const char *ext)
{ {
@ -954,16 +956,17 @@ file_name (const char *file, const char *ext)
if (access (temp, F_OK) != -1) if (access (temp, F_OK) != -1)
return (temp); return (temp);
else
return ((char *) " "); free (temp);
return (char *) space;
} }
static void static void
mkfile_output (struct commandline *cmd) mkfile_output (struct commandline *cmd)
{ {
char *mkfilename; char *mkfilename;
const char *clientname, *clntname, *xdrname, *hdrname; char *clientname, *clntname, *xdrname, *hdrname;
const char *servername, *svcname, *servprogname, *clntprogname; char *servername, *svcname, *servprogname, *clntprogname;
svcname = file_name (cmd->infile, "_svc.c"); svcname = file_name (cmd->infile, "_svc.c");
clntname = file_name (cmd->infile, "_clnt.c"); clntname = file_name (cmd->infile, "_clnt.c");
@ -977,8 +980,8 @@ mkfile_output (struct commandline *cmd)
} }
else else
{ {
servername = " "; servername = (char *) space;
clientname = " "; clientname = (char *) space;
} }
servprogname = extendfile (cmd->infile, "_server"); servprogname = extendfile (cmd->infile, "_server");
clntprogname = extendfile (cmd->infile, "_client"); clntprogname = extendfile (cmd->infile, "_client");
@ -988,6 +991,8 @@ mkfile_output (struct commandline *cmd)
char *cp, *temp; char *cp, *temp;
mkfilename = alloc (strlen ("Makefile.") + strlen (cmd->infile) + 1); mkfilename = alloc (strlen ("Makefile.") + strlen (cmd->infile) + 1);
if (mkfilename == NULL)
abort ();
temp = rindex (cmd->infile, '.'); temp = rindex (cmd->infile, '.');
cp = stpcpy (mkfilename, "Makefile."); cp = stpcpy (mkfilename, "Makefile.");
strncpy (cp, cmd->infile, (temp - cmd->infile)); strncpy (cp, cmd->infile, (temp - cmd->infile));
@ -1046,6 +1051,23 @@ $(LDLIBS) \n\n");
f_print (fout, "clean:\n\t $(RM) core $(TARGETS) $(OBJECTS_CLNT) \ f_print (fout, "clean:\n\t $(RM) core $(TARGETS) $(OBJECTS_CLNT) \
$(OBJECTS_SVC) $(CLIENT) $(SERVER)\n\n"); $(OBJECTS_SVC) $(CLIENT) $(SERVER)\n\n");
close_output (mkfilename); close_output (mkfilename);
free (clntprogname);
free (servprogname);
if (servername != space)
free (servername);
if (clientname != space)
free (clientname);
if (mkfilename != (char *) cmd->outfile)
free (mkfilename);
if (svcname != space)
free (svcname);
if (clntname != space)
free (clntname);
if (xdrname != space)
free (xdrname);
if (hdrname != space)
free (hdrname);
} }
/* /*

View File

@ -91,6 +91,7 @@ get_definition (void)
def_const (defp); def_const (defp);
break; break;
case TOK_EOF: case TOK_EOF:
free (defp);
return (NULL); return (NULL);
default: default:
error ("definition keyword expected"); error ("definition keyword expected");

View File

@ -535,6 +535,7 @@ docppline (const char *line, int *lineno, const char **fname)
*p = 0; *p = 0;
if (*file == 0) if (*file == 0)
{ {
free (file);
*fname = NULL; *fname = NULL;
} }
else else

View File

@ -485,6 +485,7 @@ svcudp_enablecache (SVCXPRT *transp, u_long size)
uc->uc_entries = ALLOC (cache_ptr, size * SPARSENESS); uc->uc_entries = ALLOC (cache_ptr, size * SPARSENESS);
if (uc->uc_entries == NULL) if (uc->uc_entries == NULL)
{ {
mem_free (uc, sizeof (struct udp_cache));
CACHE_PERROR (_("enablecache: could not allocate cache data")); CACHE_PERROR (_("enablecache: could not allocate cache data"));
return 0; return 0;
} }
@ -492,6 +493,8 @@ svcudp_enablecache (SVCXPRT *transp, u_long size)
uc->uc_fifo = ALLOC (cache_ptr, size); uc->uc_fifo = ALLOC (cache_ptr, size);
if (uc->uc_fifo == NULL) if (uc->uc_fifo == NULL)
{ {
mem_free (uc->uc_entries, size * SPARSENESS);
mem_free (uc, sizeof (struct udp_cache));
CACHE_PERROR (_("enablecache: could not allocate cache fifo")); CACHE_PERROR (_("enablecache: could not allocate cache fifo"));
return 0; return 0;
} }
@ -545,6 +548,7 @@ cache_set (SVCXPRT *xprt, u_long replylen)
newbuf = mem_alloc (su->su_iosz); newbuf = mem_alloc (su->su_iosz);
if (newbuf == NULL) if (newbuf == NULL)
{ {
mem_free (victim, sizeof (struct cache_node));
CACHE_PERROR (_("cache_set: could not allocate new rpc_buffer")); CACHE_PERROR (_("cache_set: could not allocate new rpc_buffer"));
return; return;
} }

View File

@ -1,5 +1,5 @@
/* Get source filter. Linux version. /* Get source filter. Linux version.
Copyright (C) 2004 Free Software Foundation, Inc. Copyright (C) 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
@ -112,14 +112,16 @@ getsourcefilter (int s, uint32_t interface, const struct sockaddr *group,
gf->gf_numsrc = *numsrc; gf->gf_numsrc = *numsrc;
/* We need to provide the appropriate socket level value. */ /* We need to provide the appropriate socket level value. */
int result;
int sol = __get_sol (group->sa_family, grouplen); int sol = __get_sol (group->sa_family, grouplen);
if (sol == -1) if (sol == -1)
{ {
__set_errno (EINVAL); __set_errno (EINVAL);
return -1; result = -1;
} }
else
int result = __getsockopt (s, sol, MCAST_MSFILTER, gf, &needed); {
result = __getsockopt (s, sol, MCAST_MSFILTER, gf, &needed);
/* If successful, copy the results to the places the caller wants /* If successful, copy the results to the places the caller wants
them in. */ them in. */
@ -127,9 +129,11 @@ getsourcefilter (int s, uint32_t interface, const struct sockaddr *group,
{ {
*fmode = gf->gf_fmode; *fmode = gf->gf_fmode;
memcpy (slist, gf->gf_slist, memcpy (slist, gf->gf_slist,
MIN (*numsrc, gf->gf_numsrc) * sizeof (struct sockaddr_storage)); MIN (*numsrc, gf->gf_numsrc)
* sizeof (struct sockaddr_storage));
*numsrc = gf->gf_numsrc; *numsrc = gf->gf_numsrc;
} }
}
if (! use_alloca) if (! use_alloca)
{ {

View File

@ -1,5 +1,5 @@
/* Set source filter. Linux version. /* Set source filter. Linux version.
Copyright (C) 2004 Free Software Foundation, Inc. Copyright (C) 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
@ -57,14 +57,15 @@ setsourcefilter (int s, uint32_t interface, const struct sockaddr *group,
memcpy (gf->gf_slist, slist, numsrc * sizeof (struct sockaddr_storage)); memcpy (gf->gf_slist, slist, numsrc * sizeof (struct sockaddr_storage));
/* We need to provide the appropriate socket level value. */ /* We need to provide the appropriate socket level value. */
int result;
int sol = __get_sol (group->sa_family, grouplen); int sol = __get_sol (group->sa_family, grouplen);
if (sol == -1) if (sol == -1)
{ {
__set_errno (EINVAL); __set_errno (EINVAL);
return -1; result = -1;
} }
else
int result = __setsockopt (s, sol, MCAST_MSFILTER, gf, needed); result = __setsockopt (s, sol, MCAST_MSFILTER, gf, needed);
if (! use_alloca) if (! use_alloca)
{ {