+2002-03-14 Sam Hartman <hartmans@mit.edu>
+
+ * kerberos5.c kerberos.c (Data): Don't overflow
+ buffer. [telnet/1073]
+
2002-03-13 Ezra Peisach <epeisach@mit.edu>
* configure.in: Do not explicitly add getent.o and setenv.o to
{
unsigned char *p = str_data + 4;
const unsigned char *cd = (const unsigned char *)d;
-
+ size_t spaceleft = sizeof(str_data)-4;
if (c == -1)
c = strlen((const char *)cd);
*p++ = ap->type;
*p++ = ap->way;
*p++ = type;
+ spaceleft -= 3;
while (c-- > 0) {
- if ((*p++ = *cd++) == IAC)
- *p++ = IAC;
+if ((*p++ = *cd++) == IAC) {
+*p++ = IAC;
+spaceleft--;
+}
+if (--spaceleft <= 4) {
+errno = ENOMEM;
+return -1;
+}
+
}
*p++ = IAC;
*p++ = SE;
#endif /* FORWARD */
-static unsigned char str_data[2048] = { IAC, SB, TELOPT_AUTHENTICATION, 0,
+static unsigned char str_data[8192] = {IAC, SB, TELOPT_AUTHENTICATION, 0,
AUTHTYPE_KERBEROS_V5, };
/*static unsigned char str_name[1024] = { IAC, SB, TELOPT_AUTHENTICATION,
TELQUAL_NAME, };*/
{
unsigned char *p = str_data + 4;
unsigned char *cd = (unsigned char *)d;
+ size_t spaceleft = sizeof(str_data)-4;
if (c == -1)
c = strlen((char *)cd);
*p++ = ap->type;
*p++ = ap->way;
*p++ = type;
+ spaceleft -= 3;
while (c-- > 0) {
- if ((*p++ = *cd++) == IAC)
- *p++ = IAC;
+if ((*p++ = *cd++) == IAC) {
+*p++ = IAC;
+spaceleft--;
+}
+if (--spaceleft <= 4) {
+errno = ENOMEM;
+return -1;
+}
+
}
*p++ = IAC;
*p++ = SE;