[pacman-dev] [PATCH] pacman/upgrade: Check malloc() return value

Allan McRae allan at archlinux.org
Sat Mar 8 02:29:29 EST 2014


On 08/03/14 17:07, Sören Brinkmann wrote:
> On Sat, 2014-03-08 at 05:02PM +1000, Allan McRae wrote:
>> On 07/03/14 16:24, Sören Brinkmann wrote:
>>> Check the return value of malloc() before dereferencing the returned pointer.
>>>
>>> Signed-off-by: Sören Brinkmann <soeren.brinkmann at gmail.com>
>>> ---
>>>  src/pacman/upgrade.c | 3 +++
>>>  1 file changed, 3 insertions(+)
>>>
>>> diff --git a/src/pacman/upgrade.c b/src/pacman/upgrade.c
>>> index 5416f6180b39..19aa17218ce4 100644
>>> --- a/src/pacman/upgrade.c
>>> +++ b/src/pacman/upgrade.c
>>> @@ -51,6 +51,9 @@ int pacman_upgrade(alpm_list_t *targets)
>>>  	 */
>>>  	for(i = targets; i; i = alpm_list_next(i)) {
>>>  		int *r = malloc(sizeof(int));
>>> +		if(r == NULL) {
>>> +			return 1;
>>> +		}
>>>  
>>>  		if(strstr(i->data, "://")) {
>>>  			char *str = alpm_fetch_pkgurl(config->handle, i->data);
>>>
>>
>> Fine. Although if malloc of an int fails, I'm not sure we can do a lot!
> 
> Right, but bailing out gracefully is probably better than a segfault? I
> do not really mind. If you don't want it, don't apply it. But not
> checking the return value of malloc() is simply wrong, IMHO.
> 
> 	Sören
> 

I want to add something like this in the check:

  pm_printf(ALPM_LOG_ERROR, _("memory exhausted\n"));

otherwise we just drop out with no notification to the user.  A segfault
at least tells them something went wrong...  However, I'm not sure we
can achieve that when we fail malloc for an int.

Allan


More information about the pacman-dev mailing list