ports/54855: PATCH: fix mjpegtools divx tools segfaults
Matthew Reimer
mreimer at vpop.net
Fri Jul 25 15:30:22 UTC 2003
>Number: 54855
>Category: ports
>Synopsis: PATCH: fix mjpegtools divx tools segfaults
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Jul 25 08:30:19 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator: Matthew Reimer
>Release: FreeBSD 4.8-STABLE i386
>Organization:
>Environment:
System: FreeBSD bilbo.vpop.net 4.8-STABLE FreeBSD 4.8-STABLE #6: Sat Jul 5 14:18:50 CDT 2003 root at bilbo.vpop.net:/usr/obj/usr/src/sys/BILBO i386
-stable
mjpegtools 1.6.1
avifile-0.7.34.20030319,2
>Description:
Running any of the divx tools (lav2divx, yuv2divx, divxdec)
results in a segfault.
>How-To-Repeat:
Run any of the divx tools (lav2divx, yuv2divx, divxdec).
>Fix:
From http://sourceforge.net/mailarchive/message.php?msg_id=4333933:
--- lavtools/divxdec.cpp.orig Mon Jul 21 12:37:07 2003
+++ lavtools/divxdec.cpp Mon Jul 21 12:11:58 2003
@@ -106,7 +106,7 @@
#include <sys/time.h>
#include <unistd.h> // Needed for the access call to check if file exists
#include <getopt.h> // getopt
-#include <stdint.h> // standard integer types
+#include <sys/types.h> // standard integer types
#include <stdlib.h> // standard library with integer division
#include <stdio.h>
#include <config.h>
@@ -211,7 +211,7 @@
fmt = RIFFINFO_IYUV;
}
// only in avifile-0.6
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
else if ( caps & IVideoDecoder::CAP_I420 )
{
fmt = RIFFINFO_I420;
@@ -595,7 +595,7 @@
// end of data, yes?
return 0;
}
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
currentFrame.inputBuffer = imsrc->Data ();
#else
currentFrame.inputBuffer = imsrc->data ();
@@ -634,7 +634,7 @@
break;
}
// done with image. ( was delete imsrc; )
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
imsrc->Release() ;
#else
imsrc->release() ;
@@ -944,7 +944,7 @@
mjpeg_debug ( "VIDEO: Using decoder %s", sFourCC );
fourCCToString ( input.files[input.currentFile].outputCodec, sFourCC );
mjpeg_debug ( "VIDEO: Using interim YUV format %s", sFourCC );
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
input.files[input.currentFile].frames = input.invstream->GetLength ();
#else
input.files[input.currentFile].frames = input.invstream->GetEndPos ();
@@ -957,7 +957,7 @@
input.inastream->StartStreaming ();
if ( input.files[input.currentFile].frames == 0)
{
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
input.files[input.currentFile].frames = input.inastream->GetLength ();
#else
input.files[input.currentFile].frames = input.inastream->GetEndPos ();
@@ -973,14 +973,14 @@
// key frame.
if ( input.processVideo )
{
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
framepos_t fp = input.invstream->SeekToKeyFrame ( firstFrame );
#else
framepos_t fp = input.invstream->SeekToKeyframe ( firstFrame );
#endif
if ( input.processAudio )
{
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
double pos = input.invstream->GetTime ( max( 0, fp - 1 ) );
input.inastream->SeekTime ( pos );
#else
@@ -1284,7 +1284,7 @@
exit (1);
}
-FILE* real_stdout;
+FILE real_stdout;
int
main (int argc, char **argv)
@@ -1309,16 +1309,20 @@
std::cout.rdbuf ( std::cerr.rdbuf () );
//
// 4. keep old stdout FILE, and use stderr in its place (for printf ("...") ; )
- real_stdout = stdout ;
- stdout = stderr;
+ real_stdout = *stdout ;
+ *stdout = *stderr;
displayGreeting();
if ( GetAvifileVersion ( ) != AVIFILE_VERSION )
{
- mjpeg_error_exit1 ( "This binary was compiled for Avifile version %.2f but the library is %.2f"
- , AVIFILE_VERSION
- , GetAvifileVersion () );
+ mjpeg_error_exit1 ( "This binary was compiled for Avifile version %d.%d.%d but the library is %d.%d.%d"
+ , AVIFILE_VERSION >> 16
+ , (AVIFILE_VERSION >> 8) & 0xff
+ , AVIFILE_VERSION & 0xff
+ , GetAvifileVersion () >> 16
+ , (GetAvifileVersion () >> 8) & 0xff
+ , GetAvifileVersion () & 0xff);
}
( void ) mjpeg_default_handler_verbosity ( 3 );
@@ -1583,7 +1587,7 @@
inastream = file->GetStream ( 0, AviStream::Audio );
mjpeg_debug ( "AUDIO stream queried" );
}
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
input.files[i].frames = invstream->GetLength();
#else
input.files[i].frames = invstream->GetEndPos ();
@@ -1733,7 +1737,7 @@
if ( 0 == strcmp ( "-", filenameYUV ) )
{
//output.fdYUV = FD_STDOUT;
- output.fdYUV = fileno ( real_stdout );
+ output.fdYUV = fileno ( &real_stdout );
}
else
{
@@ -2042,7 +2046,7 @@
freeAll ();
// reassign cout, stdout to their original values.
std::cout.rdbuf ( real_cout );
- stdout = real_stdout;
+ *stdout = real_stdout;
mjpeg_info ( " " );
mjpeg_info ( "Done. %i frames", output.processedFrames );
--- lavtools/lav2divx.cpp.orig Mon Jul 21 12:33:21 2003
+++ lavtools/lav2divx.cpp Mon Jul 21 12:11:43 2003
@@ -218,7 +218,7 @@
printf ( " -s --forcedaudiorate\taudio sample rate of input file (Hz);\n\t\t\tuse only if avifile gets it wrong\n" );
printf ( " -n --noise\t\tnoise filter (0..2, default 0)\n" );
printf ( " -g --guess\t\tguess values for -c and -z options\n" );
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
printf ( " -L --listcodecs\tdisplay available avifile codecs (LONG)\n" );
printf ( " -k --keyframes\tset keyframes attribute (default 15)\n" );
printf ( " -C --crispness\tset crispness attribute (default 20)\n" );
@@ -256,7 +256,7 @@
mjpeg_info ( "-----------------------------" );
}
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
static void
listCodecs ( )
{
@@ -289,9 +289,13 @@
if ( GetAvifileVersion ( ) != AVIFILE_VERSION )
{
- mjpeg_error_exit1 ( "This binary was compiled for Avifile version %s but the library is %s"
- , AVIFILE_VERSION
- , GetAvifileVersion ( ) );
+ mjpeg_error_exit1 ( "This binary was compiled for Avifile version %d.%d.%d but the library is %d.%d.%d"
+ , AVIFILE_VERSION >> 16
+ , (AVIFILE_VERSION >> 8) & 0xff
+ , AVIFILE_VERSION & 0xff
+ , GetAvifileVersion ( ) >> 16
+ , (GetAvifileVersion ( ) >> 8) & 0xff
+ , GetAvifileVersion ( ) & 0xff);
}
( void ) mjpeg_default_handler_verbosity ( 1 );
@@ -315,7 +319,7 @@
int opt_h = 0;
int opt_mono = 0;
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
int opt_keyframes = 15;
int opt_crispness = 20;
#endif
@@ -379,7 +383,7 @@
{"video_stream", required_argument, NULL, 'V'},
{"number_cpus", required_argument, NULL, 'U'},
{"outputfile", required_argument, NULL, 'o'},
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
{"keyframes", required_argument, NULL, 'k'},
{"crispness", required_argument, NULL, 'C'},
{"listcodecs", no_argument, NULL, 'L'},
@@ -391,7 +395,7 @@
};
copt =
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
getopt_long ( argc, argv, "LE:fa:e:c:b:o:s:gmvk:C:", long_options, &option_index );
#else
getopt_long ( argc, argv, "E:fa:e:c:b:o:s:gmv", long_options, &option_index );
@@ -449,7 +453,7 @@
outputfile = optarg;
break;
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
case 'k':
opt_keyframes = atoi ( optarg );
break;
@@ -681,7 +685,7 @@
avifile = CreateIAviWriteFile ( outputfile );
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
const CodecInfo *codecInfo = CodecInfo::match ( fccHandler );
if (codecInfo == NULL)
{
--- lavtools/libavifile.h.orig Thu Apr 25 00:49:12 2002
+++ lavtools/libavifile.h Mon Jul 21 12:13:05 2003
@@ -32,18 +32,18 @@
#include <videoencoder.h>
// Correct the version numbers
-#if AVIFILE_MAJOR_VERSION == 0
-#if AVIFILE_MINOR_VERSION == 6
-#undef AVIFILE_MINOR_VERSION
-#define AVIFILE_MINOR_VERSION 60
-#elif AVIFILE_MINOR_VERSION == 7
-#undef AVIFILE_MINOR_VERSION
-#define AVIFILE_MINOR_VERSION 70
-#endif /* AVIFILE_MINOR_VERSION == 6/7 */
-#endif /* AVIFILE_MAJOR_VERSION == 0 */
+//#if AVIFILE_MAJOR_VERSION == 0
+//#if AVIFILE_MINOR_VERSION == 6
+//#undef AVIFILE_MINOR_VERSION
+//#define AVIFILE_MINOR_VERSION 60
+//#elif AVIFILE_MINOR_VERSION == 7
+//#undef AVIFILE_MINOR_VERSION
+//#define AVIFILE_MINOR_VERSION 70
+//#endif /* AVIFILE_MINOR_VERSION == 6/7 */
+//#endif /* AVIFILE_MAJOR_VERSION == 0 */
// Import version-dependent headers
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION < 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION < 6
#include <aviutil.h>
typedef unsigned int framepos_t;
#else
--- lavtools/yuv2divx.cpp.orig Mon Jul 21 12:33:21 2003
+++ lavtools/yuv2divx.cpp Mon Jul 21 12:16:28 2003
@@ -267,7 +267,7 @@
printf ( " -d --droplsb\t\tdrop x least significant bits (0..3, default 0)\n" );
printf ( " -n --noise\t\tnoise filter (0..2, default 0)\n" );
printf ( " -g --guess\t\tguess values for -c and -z options\n" );
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
printf ( " -k --keyframes\tset keyframes attribute (default 15)\n" );
printf ( " -C --crispness\tset crispness attribute (default 20)\n" );
printf ( " -L --listcodecs\tshow the list of avifile codecs (LONG!)\n" );
@@ -306,7 +306,7 @@
mjpeg_info ( "-----------------------------" );
}
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
static void
listCodecs ( )
{
@@ -340,9 +340,13 @@
if ( GetAvifileVersion ( ) != AVIFILE_VERSION )
{
- mjpeg_error_exit1 ( "This binary was compiled for Avifile version %s but the library is %s"
- , AVIFILE_VERSION
- , GetAvifileVersion ( ) );
+ mjpeg_error_exit1 ( "This binary was compiled for Avifile version %d.%d.%d but the library is %d.%d.%d"
+ , AVIFILE_VERSION >> 16
+ , (AVIFILE_VERSION >> 8) & 0xff
+ , AVIFILE_VERSION & 0xff
+ , GetAvifileVersion ( ) >> 16
+ , (GetAvifileVersion ( ) >> 8) & 0xff
+ , GetAvifileVersion ( ) & 0xff);
}
( void ) mjpeg_default_handler_verbosity ( 1 );
@@ -380,7 +384,7 @@
int audio_bytes;
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
int opt_keyframes = 15;
int opt_crispness = 20;
#endif
@@ -429,7 +433,7 @@
{"outputfile", required_argument, NULL, 'o'},
{"droplsb", required_argument, NULL, 'd'},
{"noise", required_argument, NULL, 'n'},
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
{"keyframes", required_argument, NULL, 'k'},
{"crispness", required_argument, NULL, 'C'},
{"listcodecs", no_argument, NULL, 'L' },
@@ -441,7 +445,7 @@
};
copt =
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
getopt_long ( argc, argv, "F:E:A:a:w:h:e:c:b:o:s:n:d:gvVLk:C:", long_options, &option_index );
#else
getopt_long ( argc, argv, "F:E:A:a:w:h:e:c:b:o:s:n:d:gvV", long_options, &option_index );
@@ -503,7 +507,7 @@
audioexist = 1;
break;
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
case 'k':
opt_keyframes = atoi ( optarg );
break;
@@ -769,7 +773,7 @@
avifile = CreateIAviWriteFile ( outputfile );
-#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 60
+#if AVIFILE_MAJOR_VERSION == 0 && AVIFILE_MINOR_VERSION >= 6
const CodecInfo *codecInfo = CodecInfo::match ( opt_codec );
if ( codecInfo == NULL )
{
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list