rem: if (len >= (int)(sizeof(c->c.len) + c->c.len)) {
add: if (len >= (int)(sizeof(c->c.len) + c->c.len + sizeof(c->sock))) {
context: int get_all_ucontacts(void *buf, int len, unsigned int flags){	dlist_t *p;	urecord_t *r;	ucontact_t *c;	void *cp;	int shortage;	cp = buf;	shortage = 0;	/* Reserve space for terminating 0000 */	len -= sizeof(c->c.len);	for (p = root; p != NULL; p = p->next) {		lock_udomain(p->d);		if (p->d->d_ll.n <= 0) {			unlock_udomain(p->d);			continue;		}		for (r = p->d->d_ll.first; r != NULL; r = r->d_ll.next) {			for (c = r->contacts; c != NULL; c = c->next) {				if (c->c.len <= 0)					continue;				     /*				      * List only contacts that have all requested				      * flags set				      */				if ((c->flags & flags) != flags)					continue;				if (c->received.s) {					if (len >= (int)(sizeof(c->received.len) + c->received.len)) {						memcpy(cp, &c->received.len, sizeof(c->received.len));						cp = (char*)cp + sizeof(c->received.len);						memcpy(cp, c->received.s, c->received.len);						cp = (char*)cp + c->received.len;						len -= sizeof(c->received.len) + c->received.len;					} else {						shortage += sizeof(c->received.len) + c->received.len;					}				} else {					if (len >= (int)(sizeof(c->c.len) + c->c.len)) {						memcpy(cp, &c->c.len, sizeof(c->c.len));						cp = (char*)cp + sizeof(c->c.len);						memcpy(cp, c->c.s, c->c.len);						cp = (char*)cp + c->c.len;						len -= sizeof(c->c.len) + c->c.len;					} else {						shortage += sizeof(c->c.len) + c->c.len;					}				}			}		}		unlock_udomain(p->d);	}	/* len < 0 is possible, if size of the buffer < sizeof(c->c.len) */	if (len >= 0)		memset(cp, 0, sizeof(c->c.len));	/* Shouldn't happen */	if (shortage > 0 && len > shortage) {		abort();	}	shortage -= len;	return shortage > 0 ? shortage : 0;}