if (nprops < 0 || nprops > SIZE_T_MAX/(sizeof(FontPropRec) + sizeof(char))) return -1;
_fs_convert_props(pi, po, pd, pfi)    fsPropInfo *pi;    fsPropOffset *po;    pointer     pd;    FontInfoPtr pfi;{    FontPropPtr dprop;    int         i,                nprops;    char       *is_str;    fsPropOffset local_off;    char *off_adr;/* stolen from server/include/resource.h */#define BAD_RESOURCE 0xe0000000    nprops = pfi->nprops = pi->num_offsets;    dprop = (FontPropPtr) xalloc(sizeof(FontPropRec) * nprops);    is_str = (char *) xalloc(sizeof(char) * nprops);    if (!dprop || !is_str) {	xfree(is_str);	xfree(dprop);	return -1;    }    pfi->props = dprop;    pfi->isStringProp = is_str;    off_adr = (char *)po;    for (i = 0; i < nprops; i++, dprop++, is_str++) {	memcpy(&local_off, off_adr, SIZEOF(fsPropOffset));	dprop->name = MakeAtom(&pd[local_off.name.position],			       local_off.name.length, 1);	if (local_off.type != PropTypeString) {	    *is_str = FALSE;	    dprop->value = local_off.value.position;	} else {	    *is_str = TRUE;	    dprop->value = (INT32) MakeAtom(&pd[local_off.value.position],					    local_off.value.length, 1);	    if (dprop->value == BAD_RESOURCE)	    {		xfree (pfi->props);		xfree (pfi->isStringProp);		pfi->props = 0;		pfi->isStringProp = 0;		return -1;	    }	}	off_adr += SIZEOF(fsPropOffset);    }    return nprops;}