On 2009/07/24 18:01, Brad wrote: > Here is an update to Transcode 1.1.3. This also has the lzo FLAVOR > again unlike the previous 1.1.2 update now that there is the lzo2 > library in the ports tree.
When given command line arguments other than complete long options, getopt_long(3) runs past the end of the long_options array (i = 101; there are 100 elements). This is because it isn't terminated with the required {0,0,0,0} (generated in src/cmdline_def.h). On amd64 this causes a bus error for me. Backtrace below. I'm pretty surprised upstream didn't run into this as GNU getopt_long has the same termination requirement as the version in our libc. > - > avcodec.>=13.1,avutil.>=6:ffmpeg->=20080620p10:graphics/ffmpeg \ > + > avcodec.>=10,avformat.>=12,avutil.>=4,postproc.>=6::graphics/ffmpeg \ I think we need avcodec.>=13.1 so that WANTLIB is correct, I also think we need to keep the pkgspec to help the package tools, I'm not sure whether it's intended but my observation is that the library specs are just a check (pkg_add exits if it's not satisfied), whereas we need to specify pkgspec to actually get the package updated. (gdb) r Starting program: /usr/local/bin/transcode 'transcode -h | more' shows a list of available command line options. Program exited with code 01. (gdb) set args -h (gdb) r Starting program: /usr/local/bin/transcode -h Program received signal SIGBUS, Bus error. [Switching to process 10925, thread 0x201494800] strncmp (s1=0x7f7ffffe3962 "h", s2=0x6f6c2e3478766964 <Address 0x6f6c2e3478766964 out of bounds>, n=1) at /usr/src/lib/libc/string/strncmp.c:45 45 if (*s1 != *s2++) (gdb) bt full #0 strncmp (s1=0x7f7ffffe3962 "h", s2=0x6f6c2e3478766964 <Address 0x6f6c2e3478766964 out of bounds>, n=1) at /usr/src/lib/libc/string/strncmp.c:45 No locals. #1 0x000000020a0ac806 in parse_long_options (nargv=0x7f7ffffe33e8, options=0x891800 "hvq:i:o:t:p:m:a:c:T:S:L:H:x:g:f:e:n:y:F:N:R:w:b:E:j:I:X:B:Z:Y:r:zlkKG:C:V:ds:AJ:Q:P:D:M:OW:U:u:", long_options=0x684220, idx=0x0, short_too=1) at /usr/src/lib/libc/stdlib/getopt_long.c:184 current_argv = 0x7f7ffffe3962 "h" has_equal = 0x0 current_argv_len = 1 i = 101 match = -1 #2 0x000000020a0acd03 in getopt_internal (nargc=2, nargv=0x7f7ffffe33e8, options=0x891800 "hvq:i:o:t:p:m:a:c:T:S:L:H:x:g:f:e:n:y:F:N:R:w:b:E:j:I:X:B:Z:Y:r:zlkKG:C:V:ds:AJ:Q:P:D:M:OW:U:u:", long_options=0x684220, idx=0x0, flags=1) at /usr/src/lib/libc/stdlib/getopt_long.c:404 oli = 0xca0 <Address 0xca0 out of bounds> optchar = 1 short_too = 1 posixly_correct = 0 #3 0x0000000000413965 in parse_cmdline (argc=2, argv=0x7f7ffffe33e8, vob=0x207a1ac00) at /usr/obj/ports/transcode-1.1.3/transcode-1.1.3/src/cmdline.c:201 shortopts = 0x891800 "hvq:i:o:t:p:m:a:c:T:S:L:H:x:g:f:e:n:y:F:N:R:w:b:E:j:I:X:B:Z:Y:r:zlkKG:C:V:ds:AJ:Q:P:D:M:OW:U:u:" option = 32 #4 0x000000000040a8a5 in main (argc=2, argv=0x7f7ffffe33e8) at /usr/obj/ports/transcode-1.1.3/transcode-1.1.3/src/transcode.c:1384 sigs_to_block = 16386 psubase = 0x0 fch = 9.8813129168249309e-324 asr = 6.926194255891346e-310 leap_bytes1 = 32639 leap_bytes2 = -117864 max_frame_buffer = 10 tstart = (struct fc_time *) 0x0 specs = {frc = -117864, width = 32639, height = -117784, format = 32639, rate = 2, channels = 0, bits = 153101265, samples = 2.5394974196240072e-321}