Your message dated Sun, 27 Apr 2008 23:53:37 +0100
with message-id <[EMAIL PROTECTED]>
and subject line xmms has been removed from Debian, closing #168726
has caused the Debian Bug report #168726,
regarding xmms doesn't process long argument lists
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [EMAIL PROTECTED]
immediately.)
--
168726: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=168726
Debian Bug Tracking System
Contact [EMAIL PROTECTED] with problems
--- Begin Message ---
Package: xmms
Version: 1.2.7-1.1
If I type 'xmms */*.ogg' in a large directory of ripped albums, xmms
only enqueues the first 600 files or so. This is because the packet
exchange functions (remote_send_packet() and ctrlsocket_func()) don't
check the return values of read() and write(); when a very large (> 50k
or so on my system) CMD_PLAYLIST_ADD packet can't fit through the pipe
in one go, all but the first write()'s worth gets silently dropped.
The attached patch runs read() and write() until they complete (as
well as checking for I/O errors).
--- xmms-1.2.7.orig/libxmms/xmmsctrl.c 2002-11-11 17:03:49.000000000 -0500
+++ xmms-1.2.7/libxmms/xmmsctrl.c 2002-11-11 17:29:29.000000000 -0500
@@ -67,13 +67,28 @@
static void remote_send_packet(gint fd, guint32 command, gpointer data,
guint32 data_length)
{
ClientPktHeader pkt_hdr;
+ int len;
pkt_hdr.version = XMMS_PROTOCOL_VERSION;
pkt_hdr.command = command;
pkt_hdr.data_length = data_length;
- write(fd, &pkt_hdr, sizeof (ClientPktHeader));
- if (data_length && data)
- write(fd, data, data_length);
+ len = write(fd, &pkt_hdr, sizeof (ClientPktHeader));
+ if (len < sizeof(ClientPktHeader))
+ {
+ g_log(NULL, G_LOG_LEVEL_ERROR, "%s: Couldn't write packet
header.", PACKAGE);
+ return;
+ }
+ while (data_length && data)
+ {
+ len = write(fd, data, data_length);
+ if (len <= 0)
+ {
+ g_log(NULL, G_LOG_LEVEL_ERROR, "%s: Couldn't write
packet data.", PACKAGE);
+ return;
+ }
+ data_length -= len;
+ data += len;
+ }
}
static void remote_send_guint32(gint session, guint32 cmd, guint32 val)
--- xmms-1.2.7.orig/xmms/controlsocket.c 2002-11-11 17:19:51.000000000
-0500
+++ xmms-1.2.7/xmms/controlsocket.c 2002-11-11 17:40:48.000000000 -0500
@@ -207,11 +207,26 @@
continue;
pkt = g_malloc0(sizeof (PacketNode));
- read(fd, &pkt->hdr, sizeof (ClientPktHeader));
- if (pkt->hdr.data_length)
+ len = read(fd, &pkt->hdr, sizeof (ClientPktHeader));
+ if (len < sizeof(ClientPktHeader))
{
+ g_log(NULL, G_LOG_LEVEL_ERROR, "%s: Couldn't read
packet header.", PACKAGE);
+ continue;
+ }
+ len = 0;
+ if (pkt->hdr.data_length)
pkt->data = g_malloc0(pkt->hdr.data_length);
- read(fd, pkt->data, pkt->hdr.data_length);
+ while(len < pkt->hdr.data_length)
+ {
+ int read_len = read(fd, pkt->data+len,
pkt->hdr.data_length-len);
+ if (read_len <= 0)
+ break;
+ len += read_len;
+ }
+ if (len < pkt->hdr.data_length)
+ {
+ g_log(NULL, G_LOG_LEVEL_ERROR, "%s: Couldn't read
packet data.", PACKAGE);
+ break; /* safe to say we're hosed */
}
pkt->fd = fd;
switch (pkt->hdr.command)
--- End Message ---
--- Begin Message ---
Version: 1:1.2.10+20070601-1+rm
The xmms package has been removed from Debian testing, unstable and
experimental, so I am now closing the bugs that were still opened
against it.
For more information about this package's removal, read
http://bugs.debian.org/461309 . That bug might give the reasons why
this package was removed, and suggestions of possible replacements.
Don't hesitate to reply to this mail if you have any question.
Thank you for your contribution to Debian.
--
Marco Rodrigues
http://Marco.Tondela.org
--- End Message ---