View | Details | Raw Unified
Collapse All | Expand All

(-) telnet/telnet.c.orig (-5 / +25 lines)
 Lines 1131-1136    Link Here 
unsigned char slc_reply[128];
unsigned char slc_reply[128];
unsigned char const * const slc_reply_eom = &slc_reply[sizeof(slc_reply)];
unsigned char *slc_replyp;
unsigned char *slc_replyp;
	void
	void
 Lines 1146-1151    Link Here 
	void
	void
slc_add_reply(unsigned char func, unsigned char flags, cc_t value)
slc_add_reply(unsigned char func, unsigned char flags, cc_t value)
{
{
       /* A sequence of up to 6 bytes my be written for this member of the SLC
        * suboption list by this function.  The end of negotiation command,
        * which is written by slc_end_reply(), will require 2 additional
        * bytes.  Do not proceed unless there is sufficient space for these
        * items.
        */
	if (&slc_replyp[6+2] > slc_reply_eom)
		return;
	if ((*slc_replyp++ = func) == IAC)
	if ((*slc_replyp++ = func) == IAC)
		*slc_replyp++ = IAC;
		*slc_replyp++ = IAC;
	if ((*slc_replyp++ = flags) == IAC)
	if ((*slc_replyp++ = flags) == IAC)
 Lines 1159-1164    Link Here 
{
{
    int len;
    int len;
	/* The end of negotiation command requires 2 bytes. */
	if (&slc_replyp[2] > slc_reply_eom)
		return;
    *slc_replyp++ = IAC;
    *slc_replyp++ = IAC;
    *slc_replyp++ = SE;
    *slc_replyp++ = SE;
    len = slc_replyp - slc_reply;
    len = slc_replyp - slc_reply;
 Lines 1236-1243    Link Here 
	}
	}
}
}
#define	OPT_REPLY_SIZE	256
#define	OPT_REPLY_SIZE	(2 * SUBBUFSIZE)
unsigned char *opt_reply;
unsigned char *opt_reply = NULL;
unsigned char *opt_replyp;
unsigned char *opt_replyp;
unsigned char *opt_replyend;
unsigned char *opt_replyend;
 Lines 1298-1305    Link Here 
		return;
		return;
	}
	}
	vp = env_getvalue(ep);
	vp = env_getvalue(ep);
	if (opt_replyp + (vp ? strlen((char *)vp) : 0) +
        if (opt_replyp + (vp ? 2 * strlen((char *)vp) : 0) +
				strlen((char *)ep) + 6 > opt_replyend)
                                2 * strlen((char *)ep) + 6 > opt_replyend)
	{
	{
		int len;
		int len;
		unsigned char *p;
		unsigned char *p;
 Lines 1323-1328    Link Here 
		*opt_replyp++ = ENV_USERVAR;
		*opt_replyp++ = ENV_USERVAR;
	for (;;) {
	for (;;) {
		while ((c = *ep++)) {
		while ((c = *ep++)) {
			if (opt_replyp + (2 + 2) > opt_replyend)
				return;
			switch(c&0xff) {
			switch(c&0xff) {
			case IAC:
			case IAC:
				*opt_replyp++ = IAC;
				*opt_replyp++ = IAC;
 Lines 1337-1342    Link Here 
			*opt_replyp++ = c;
			*opt_replyp++ = c;
		}
		}
		if ((ep = vp)) {
		if ((ep = vp)) {
	                if (opt_replyp + (1 + 2 + 2) > opt_replyend)
				return;
		  *opt_replyp++ = ENV_VALUE;
		  *opt_replyp++ = ENV_VALUE;
		  vp = NULL;
		  vp = NULL;
		} else
		} else
 Lines 1361-1367    Link Here 
{
{
	int len;
	int len;
	len = opt_replyp - opt_reply + 2;
	if (opt_replyp + 2 > opt_replyend)
		return;
	len = opt_replyp + 2 - opt_reply;
	if (emptyok || len > 6) {
	if (emptyok || len > 6) {
		*opt_replyp++ = IAC;
		*opt_replyp++ = IAC;
		*opt_replyp++ = SE;
		*opt_replyp++ = SE;