On Sun, Feb 13, 2005 at 01:12:07AM +0200, Baurjan Ismagulov wrote: > The debugging build is not ready yet.
I've reproduced the bug with the debugging information. Some relevant data: Program terminated with signal 10, Bus error. ... #0 0x706dbc6c in cache_plugin_read (this_gen=0x6d0d80, buf=0xefffee58 "RIFF╛т\023", len=8) at input_cache.c:77 77 *((uint64_t *)buf) = *(uint64_t *)(&(this->buf[this->buf_pos])); (gdb) p buf $1 = 0xefffee58 "RIFF╛т\023" (gdb) p &(((cache_input_plugin_t *)this_gen)->buf[((cache_input_plugin_t *)this_gen)->buf_pos]) $2 = (uint8_t *) 0x6d0dc4 "LISTF\001" The right-hand side is not aligned to 8 bytes. The application doesn't crash with the workaround below (and doesn't work either, but this is the subject for another bug :) ). With kind regards, Baurjan. --- src/xine-engine/input_cache.c.orig 2005-02-13 11:56:03.000000000 +0200 +++ src/xine-engine/input_cache.c 2005-02-13 12:18:52.000000000 +0200 @@ -74,7 +74,7 @@ /* all bytes are in the buffer */ switch (len) { case 8: - *((uint64_t *)buf) = *(uint64_t *)(&(this->buf[this->buf_pos])); + memcpy(buf, &this->buf[this->buf_pos], sizeof(uint64_t)); break; case 7: buf[6] = (char)this->buf[this->buf_pos + 6]; @@ -87,7 +87,7 @@ buf[4] = (char)this->buf[this->buf_pos + 4]; /* fallthru */ case 4: - *((uint32_t *)buf) = *(uint32_t *)(&(this->buf[this->buf_pos])); + memcpy(buf, &this->buf[this->buf_pos], sizeof(uint32_t)); break; case 3: buf[2] = (char)this->buf[this->buf_pos + 2];