ptuser: avoid implementation-defined behavior in CreateIdList()
authorGarrett Wollman <wollman@csail.mit.edu>
Wed, 25 Jul 2012 03:41:02 +0000 (23:41 -0400)
committerDerrick Brashear <shadow@dementix.org>
Wed, 25 Jul 2012 20:29:41 +0000 (13:29 -0700)
commit97146a8ed8497e8bfe3ea24eb0fe4685430fdcf3
tree676c4547446939f5be9de636043c1ff7f2189c5a
parent2e7939ea4653ba3634445b1710aed1206f44f7ca
ptuser: avoid implementation-defined behavior in CreateIdList()

CreateIdList() is an internal subroutine of pr_IDListExpandedMembers(),
used to flatten a hash table of protection IDs into an array that can
be passed to pr_IdToName().  If for some reason the hash table had no
entries, it would call malloc(0) and, depending on how the
the implementation defines this, either return a PRNOMEM error (wrong!)
or else allocate a minimum-sized buffer which pr_IdListExpandedMembers
would then promptly leak.  Compromise between the two behaviors by
not allocating any memory in this case but returning success, and in
the caller check for an empty list and avoid the pointless RPC to
translate no IDs into no names.  pr_IDListExpandedMembers() will return
success, as it previously did in the non-PRNOMEM case.

Change-Id: I8a042bde3e98f5cf248358f37f2e875d6b5b298d
Reviewed-on: http://gerrit.openafs.org/7863
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Simon Wilkinson <simonxwilkinson@gmail.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
src/ptserver/ptuser.c