Commit a414d6b7 authored by Stewart Brodie's avatar Stewart Brodie
Browse files

Fixed a couple of serious bugs.

Detail:
  Session command handler function pointer was being left uninitialised.
    If you were lucky, it data aborted ...
  When preformatting output with vsprintf, it's not a great idea to pass
    the destination buffer as one of the substitution strings, otherwise
    it disappears up itself and generates a puff of smoke.
Admin:
  Tested with CLI_App.

Version 0.05. Tagged as 'remotedb-0_05'
parent 285ebcab
/* (0.04)
/* (0.05)
*
* This file is automatically maintained by srccommit, do not edit manually.
*
*/
#define Module_MajorVersion_CMHG 0.04
#define Module_MajorVersion_CMHG 0.05
#define Module_MinorVersion_CMHG
#define Module_Date_CMHG 24 Feb 1999
#define Module_Date_CMHG 24 May 1999
#define Module_MajorVersion "0.04"
#define Module_Version 4
#define Module_MajorVersion "0.05"
#define Module_Version 5
#define Module_MinorVersion ""
#define Module_Date "24 Feb 1999"
#define Module_Date "24 May 1999"
#define Module_FullVersion "0.05"
......@@ -76,6 +76,7 @@ caseless_strcmp(char *a, char *b)
int
debug_poll(debug_session *sess)
{
static char sbuff[REMOTE_DEBUG_MAX_LINE];
fd_set read_set;
struct timeval tv;
char *argv[20];
......@@ -99,15 +100,18 @@ debug_poll(debug_session *sess)
{
if (FD_ISSET(sess->sock,&read_set))
{
if (recv(sess->sock, debug_line, REMOTE_DEBUG_MAX_LINE,MSG_PEEK)>0)
if ((cp=strchr(debug_line,'\n'))!=NULL)
if (recv(sess->sock, debug_line, (cp-debug_line+1),0)>0)
int recv_len = recv(sess->sock, sbuff, REMOTE_DEBUG_MAX_LINE-1,MSG_PEEK);
if (recv_len>0)
{
if ((cp=memchr(sbuff,'\n', recv_len))!=NULL)
{
if (recv(sess->sock, sbuff, (cp-sbuff+1),0)>0)
{
debug_line[cp-debug_line]='\0'; /* remove the new line char */
sbuff[cp-sbuff]='\0'; /* remove the new line char */
/*
* break down string
*/
cp = debug_line;
cp = sbuff;
while (*cp != '\0')
{
while (*cp == ' ')
......@@ -149,11 +153,19 @@ debug_poll(debug_session *sess)
rc = sess->cmd_handler(argc, argv, sess->cmd_handle);
debug_printf(sess,"(6) cmd '%s' returns %d\n", name, rc);
}
else if (caseless_strcmp(argv[0], ":ack")==0)
{
/* Discard these silently */
}
else
debug_printf(sess,"(6) unknown command '%s'\n",argv[0]);
{
debug_printf(sess,"(6) unknown command '%s'\n",argv[0]);
}
more = 1; /* try for more input */
}
}
}
}
}
} while (more);
......@@ -294,13 +306,16 @@ remote_debug_open(char *info, debug_session **db_sess)
do
{
debug_socket = socket(AF_INET, SOCK_STREAM, 0);
} while (debug_socket == 0);
} while (debug_socket == -1);
hostent = gethostbyname(host);
if (hostent == NULL)
goto exit_gracefully;
sockaddr.sin_family = AF_INET;
#ifndef COMPAT_INET4
sockaddr.sin_len = sizeof(sockaddr);
#endif
sockaddr.sin_addr.s_addr = *(u_long*)hostent->h_addr;
rc = connect(debug_socket, (struct sockaddr *)&sockaddr, sizeof(sockaddr) );
......@@ -314,8 +329,10 @@ remote_debug_open(char *info, debug_session **db_sess)
goto exit_gracefully;
sess->sock = debug_socket;
sess->cmd_handler = NULL;
sess->cmd_handle = NULL;
if ((sess->info=malloc(strlen(info)+/*2 - No, you need + 3 JBeranek */ 3))==NULL)
if ((sess->info=malloc(strlen(info)+sizeof(": ")))==NULL)
goto exit_gracefully;
strcpy(sess->info, info);
......@@ -335,6 +352,7 @@ remote_debug_open(char *info, debug_session **db_sess)
exit_gracefully:
if (debug_socket >= 0)
socketclose(debug_socket);
debug_socket = -1;
if (sess)
{
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment