From: Niels Provos Date: Sat, 15 Sep 2007 00:53:47 +0000 (+0000) Subject: deal with out of memory situations for realloc X-Git-Tag: release-2.0.1-alpha~572 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=640c61bac92550c97c3ad2b04d437c559df5c119;p=libevent deal with out of memory situations for realloc svn:r429 --- diff --git a/event_rpcgen.py b/event_rpcgen.py index 07fdf383..ef780be1 100755 --- a/event_rpcgen.py +++ b/event_rpcgen.py @@ -931,20 +931,26 @@ class EntryArray(Entry): '{', ' msg->%s_length++;' % name, ' if (msg->%s_length >= msg->%s_num_allocated) { ' % (name, name), - ' if (!msg->%s_num_allocated) ' % name, - ' msg->%s_num_allocated = 1; ' % name, + ' struct %s** new_data = NULL; ' % self._refname, + ' int tobe_allocated = msg->%s_num_allocated; ' % name, + ' if (!tobe_allocated) ', + ' tobe_allocated = 1; ', ' else ', - ' msg->%s_num_allocated <<= 1; ' % name, - ' msg->%s_data = (struct %s**)realloc(msg->%s_data, ' - ' msg->%s_num_allocated * sizeof(struct %s*));' % ( - name, self._refname, name, name, self._refname ), + ' tobe_allocated <<= 1; ', + ' new_data = (struct %s**)realloc(msg->%s_data, ' + 'tobe_allocated * sizeof(struct %s*));' % ( + self._refname, name, self._refname ), + ' if (new_data == NULL) {', + ' --msg->%s_length;' % name, + ' return (NULL);', + ' }', + ' msg->%s_data = new_data;' % name, + ' msg->%s_num_allocated = tobe_allocated;' % name, ' }', - ' if (msg->%s_data == NULL)' % name, - ' return (NULL);', ' msg->%s_data[msg->%s_length - 1] = %s_new();' % ( name, name, self._refname), ' if (msg->%s_data[msg->%s_length - 1] == NULL) {' % (name, name), - ' msg->%s_length--; ' % name, + ' --msg->%s_length; ' % name, ' return (NULL);', ' }', ' msg->%s_set = 1;' % name,