Package: libxine1-misc-plugins Version: 1.1.16.3-1 Severity: normal I frequently use xine to view raw DV files recorded with dvgrab. Now, these files tend to get large (a 30-minute recording is almost 7GB), and for as long as I can remember, I've had the problem that, starting around the 20-minute mark (corresponding to the limit of a 32-bit file offset), trying to move forward or backward with the left/right arrow keys would jump back to near the beginning of the file, exactly as though the file offset had been truncated to 32 bits, which xine-lib is supposed to be smart enough to avoid. Well, I finally got frustrated enough with it to track down and fix the problem.
The offending code is at lines 304-306 of src/demuxers/demux_rawdv.c, in the function demux_raw_dv_seek(): if( !start_pos && start_time ) { start_pos = (start_time * 90 / this->duration) * this->frame_size; } Now, start_pos is of type off_t, and since we compile with -D_FILE_OFFSET_BITS=64, off_t is a 64-bit long long int, so you'd think we'd be fine here --- but we aren't, because start_time, this->duration and this->frame_size are all 32-bit ints, which means that the computed seek position gets truncated to 32 bits before it's assigned to start_pos. The simple solution, as implemented in the attached patch, is to cast start_time to off_t in line 305, expanding the computation to 64 bits in time to avoid truncation. For a one-line fix, I almost feel silly including a patch, but it's attached for completeness. Thanks. -sbigham -- System Information: Debian Release: 5.0 APT prefers testing APT policy: (990, 'testing'), (500, 'unstable'), (500, 'stable') Architecture: i386 (i686) Kernel: Linux 2.6.26-2-686 (SMP w/2 CPU cores) Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1) Shell: /bin/sh linked to /bin/bash Versions of packages libxine1-misc-plugins depends on: ii libasound2 1.0.16-2 ALSA library ii libbz2-1.0 1.0.5-1 high-quality block-sorting file co ii libc6 2.7-18 GNU C Library: Shared libraries ii libflac8 1.2.1-1.2 Free Lossless Audio Codec - runtim ii libfontconfig1 2.6.0-3 generic font configuration library ii libfreetype6 2.3.7-2+lenny1 FreeType 2 font engine, shared lib ii libice6 2:1.0.4-1 X11 Inter-Client Exchange library ii libjack0 0.116.1-4 JACK Audio Connection Kit (librari ii libjpeg62 6b-14 The Independent JPEG Group's JPEG ii liblcms1 1.17.dfsg-1+lenny1 Color management library ii libmagick10 7:6.3.7.9.dfsg1-3 image manipulation library ii libmng1 1.0.9-1 Multiple-image Network Graphics li ii libmodplug0c2 1:0.8.7-1 shared libraries for mod music bas ii libmpcdec3 1.2.2-1 Musepack (MPC) format library ii libogg0 1.1.3-4 Ogg Bitstream Library ii libpulse0 0.9.15-2 PulseAudio client libraries ii libsm6 2:1.0.3-2 X11 Session Management library ii libsmbclient 2:3.2.5-4lenny2 shared library that allows applica ii libspeex1 1.2~rc1-1 The Speex codec runtime library ii libtheora0 1.0~beta3-1 The Theora Video Compression Codec ii libtiff4 3.8.2-11 Tag Image File Format (TIFF) libra ii libvorbis0a 1.2.0.dfsg-3.1 The Vorbis General Audio Compressi ii libwavpack1 4.50.1-1 an audio codec (lossy and lossless ii libx11-6 2:1.1.5-2 X11 client-side library ii libxext6 2:1.0.4-1 X11 miscellaneous extension librar ii libxine1-bin 1.1.16.3-1 the xine video/media player librar ii libxt6 1:1.0.5-3 X11 toolkit intrinsics library ii zlib1g 1:1.2.3.3.dfsg-12 compression library - runtime libxine1-misc-plugins recommends no packages. libxine1-misc-plugins suggests no packages. -- no debconf information
--- src/demuxers/demux_rawdv.c.prev 2008-07-12 18:23:56.000000000 -0400 +++ src/demuxers/demux_rawdv.c 2009-05-31 19:42:03.000000000 -0400 @@ -302,7 +302,8 @@ } if( !start_pos && start_time ) { - start_pos = (start_time * 90 / this->duration) * this->frame_size; + /* Upcast start_time in case sizeof(off_t) > sizeof(int) */ + start_pos = ( (off_t) start_time * 90 / this->duration) * this->frame_size; } start_pos = start_pos - (start_pos % this->frame_size);