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}

Reply via email to