mirror of
https://github.com/weechat/weechat.git
synced 2026-07-06 01:33:12 +02:00
Fixed IRC message parser bug
This commit is contained in:
@@ -5,6 +5,7 @@ ChangeLog - 2005-09-15
|
||||
|
||||
|
||||
Version 0.1.5 (under dev!):
|
||||
* fixed IRC message parser bug
|
||||
* fixed scroll problem (screen moving when scrolling and new line
|
||||
displayed)
|
||||
* fixed infinite loop when scrolling back and displaying long lines
|
||||
|
||||
+47
-28
@@ -523,6 +523,42 @@ server_msgq_add_msg (t_irc_server *server, char *msg)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* server_msgq_add_unterminated: add an unterminated message to queue
|
||||
*/
|
||||
|
||||
void
|
||||
server_msgq_add_unterminated (t_irc_server *server, char *string)
|
||||
{
|
||||
if (server->unterminated_message)
|
||||
{
|
||||
server->unterminated_message =
|
||||
(char *) realloc (server->unterminated_message,
|
||||
strlen (server->unterminated_message) +
|
||||
strlen (string) + 1);
|
||||
if (!server->unterminated_message)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf (server->buffer,
|
||||
_("%s not enough memory for received IRC message\n"),
|
||||
WEECHAT_ERROR);
|
||||
}
|
||||
else
|
||||
strcat (server->unterminated_message, string);
|
||||
}
|
||||
else
|
||||
{
|
||||
server->unterminated_message = strdup (string);
|
||||
if (!server->unterminated_message)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf (server->buffer,
|
||||
_("%s not enough memory for received IRC message\n"),
|
||||
WEECHAT_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* server_msgq_add_buffer: explode received buffer, creating queued messages
|
||||
*/
|
||||
@@ -543,44 +579,27 @@ server_msgq_add_buffer (t_irc_server *server, char *buffer)
|
||||
}
|
||||
else
|
||||
{
|
||||
pos = strstr (buffer, "\n");
|
||||
if (pos)
|
||||
pos = strstr (buffer, "\r");
|
||||
if (pos && !pos[1])
|
||||
{
|
||||
pos[0] = '\0';
|
||||
server_msgq_add_msg (server, buffer);
|
||||
buffer = pos + 1;
|
||||
server_msgq_add_unterminated (server, buffer);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (server->unterminated_message)
|
||||
pos = strstr (buffer, "\n");
|
||||
if (pos)
|
||||
{
|
||||
server->unterminated_message =
|
||||
(char *) realloc (server->unterminated_message,
|
||||
strlen (server->unterminated_message) +
|
||||
strlen (buffer) + 1);
|
||||
if (!server->unterminated_message)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf (server->buffer,
|
||||
_("%s not enough memory for received IRC message\n"),
|
||||
WEECHAT_ERROR);
|
||||
}
|
||||
else
|
||||
strcat (server->unterminated_message, buffer);
|
||||
pos[0] = '\0';
|
||||
server_msgq_add_msg (server, buffer);
|
||||
buffer = pos + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
server->unterminated_message = strdup (buffer);
|
||||
if (!server->unterminated_message)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf (server->buffer,
|
||||
_("%s not enough memory for received IRC message\n"),
|
||||
WEECHAT_ERROR);
|
||||
}
|
||||
server_msgq_add_unterminated (server, buffer);
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ ChangeLog - 2005-09-15
|
||||
|
||||
|
||||
Version 0.1.5 (under dev!):
|
||||
* fixed IRC message parser bug
|
||||
* fixed scroll problem (screen moving when scrolling and new line
|
||||
displayed)
|
||||
* fixed infinite loop when scrolling back and displaying long lines
|
||||
|
||||
@@ -523,6 +523,42 @@ server_msgq_add_msg (t_irc_server *server, char *msg)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* server_msgq_add_unterminated: add an unterminated message to queue
|
||||
*/
|
||||
|
||||
void
|
||||
server_msgq_add_unterminated (t_irc_server *server, char *string)
|
||||
{
|
||||
if (server->unterminated_message)
|
||||
{
|
||||
server->unterminated_message =
|
||||
(char *) realloc (server->unterminated_message,
|
||||
strlen (server->unterminated_message) +
|
||||
strlen (string) + 1);
|
||||
if (!server->unterminated_message)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf (server->buffer,
|
||||
_("%s not enough memory for received IRC message\n"),
|
||||
WEECHAT_ERROR);
|
||||
}
|
||||
else
|
||||
strcat (server->unterminated_message, string);
|
||||
}
|
||||
else
|
||||
{
|
||||
server->unterminated_message = strdup (string);
|
||||
if (!server->unterminated_message)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf (server->buffer,
|
||||
_("%s not enough memory for received IRC message\n"),
|
||||
WEECHAT_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* server_msgq_add_buffer: explode received buffer, creating queued messages
|
||||
*/
|
||||
@@ -543,44 +579,27 @@ server_msgq_add_buffer (t_irc_server *server, char *buffer)
|
||||
}
|
||||
else
|
||||
{
|
||||
pos = strstr (buffer, "\n");
|
||||
if (pos)
|
||||
pos = strstr (buffer, "\r");
|
||||
if (pos && !pos[1])
|
||||
{
|
||||
pos[0] = '\0';
|
||||
server_msgq_add_msg (server, buffer);
|
||||
buffer = pos + 1;
|
||||
server_msgq_add_unterminated (server, buffer);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (server->unterminated_message)
|
||||
pos = strstr (buffer, "\n");
|
||||
if (pos)
|
||||
{
|
||||
server->unterminated_message =
|
||||
(char *) realloc (server->unterminated_message,
|
||||
strlen (server->unterminated_message) +
|
||||
strlen (buffer) + 1);
|
||||
if (!server->unterminated_message)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf (server->buffer,
|
||||
_("%s not enough memory for received IRC message\n"),
|
||||
WEECHAT_ERROR);
|
||||
}
|
||||
else
|
||||
strcat (server->unterminated_message, buffer);
|
||||
pos[0] = '\0';
|
||||
server_msgq_add_msg (server, buffer);
|
||||
buffer = pos + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
server->unterminated_message = strdup (buffer);
|
||||
if (!server->unterminated_message)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf (server->buffer,
|
||||
_("%s not enough memory for received IRC message\n"),
|
||||
WEECHAT_ERROR);
|
||||
}
|
||||
server_msgq_add_unterminated (server, buffer);
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user