The functions XGetFontPath, XListExtensions, and XListFonts are
	    vulnerable to an off-by-one override on malicious server responses.
	    The server replies consist of chunks consisting of a length byte
	    followed by actual string, which is not NUL-terminated.
	    While parsing the response, the length byte is overridden with '\0',
	    thus the memory area can be used as storage of C strings later on.
	    To be able to NUL-terminate the last string, the buffer is reserved
	    with an additional byte of space. For a boundary check, the variable
	    chend (end of ch) was introduced, pointing at the end of the buffer
	    which ch initially points to. Unfortunately there is a difference
	    in handling "the end of ch". While chend points at the first byte
	    that must not be written to, the for-loop uses chend as the last
	    byte that can be written to. Therefore, an off-by-one can occur.
	  The length value is interpreted as signed char on many systems
	    (depending on default signedness of char), which can lead to an out
	    of boundary write up to 128 bytes in front of the allocated storage,
	    but limited to NUL byte(s).
	  If the server sends a reply in which even the first string would
	    overflow the transmitted bytes, list[0] (or flist[0]) will be set to
	    NULL and a count of 0 is returned. If the resulting list is freed
	    with XFreeExtensionList or XFreeFontPath later on, the first Xfree
	    call is turned into Xfree (NULL-1) which will most likely trigger a
	    segmentation fault. Casting the length value to unsigned char fixes
	    the problem and allows string values with up to 255 characters.