[FFmpeg-devel] & vs. &&

Benoit Fouet benoit.fouet
Tue Oct 13 08:33:36 CEST 2009


On 2009-10-12 18:52, Reimar D?ffinger wrote:
> On Mon, Oct 12, 2009 at 06:41:20PM +0200, Benoit Fouet wrote:
>>> So, I have a patch now:
>>> Index: libavformat/aviobuf.c
>>> ===================================================================
>>> --- libavformat/aviobuf.c       (revision 20209)
>>> +++ libavformat/aviobuf.c       (working copy)
>>> @@ -590,7 +590,7 @@ int url_setbufsize(ByteIOContext *s, int
>>>  int url_resetbuf(ByteIOContext *s, int flags)
>>>  {
>>>      URLContext *h = s->opaque;
>>> -    if ((flags & URL_RDWR) || (h && h->flags != flags && !h->flags &
>>> URL_RDWR))
>>> +    if ((flags & URL_RDWR) || (h && h->flags != flags && !(h->flags &
>>> URL_RDWR)))
>>>          return AVERROR(EINVAL);
>>>
>>>      if (flags & URL_WRONLY) {
>>>
>>>
>>> This is crashing the following command line on my machine (triggered by
>>> make test), can anybody reproduce ?
>>>
>>> $ gdb --args ./ffmpeg_g -v 0 -y -flags +bitexact -dct fastint -idct
>>> simple -sws_flags +accurate_rnd+bitexact -t 1 -qscale 10 -f image2
>>> -vcodec pgmyuv -i ./tests/vsynth1/%02d.pgm -f s16le -i
>>> ././tests/data/asynth1.sw -acodec mp2
>>> ././tests/data/b-lavf.nut                                                                                                                                                        
>>>
>> The problem seems to be in the handling of buf_end.
>> When entering put_buffer() from libavformat/nutenc.c:389, the
>> ByteIOContext is as follows:
>> {buffer = 0xa465324 "\003",
>>  buffer_size = 1024,
>>  buf_ptr = 0xa465324 "\003",
>>  buf_end = 0x0,
> 
> That is almost certainly due to url_resetbuf failing (and I don't think
> there is any use of it that actually checks for failure).
> You could try if using
> if ((flags & URL_RDWR) || (h && (h->flags & (URL_RDONLY | URL_WRONLY | URL_RDWR)) != flags && !(h->flags & URL_RDWR)))
> helps any...

it doesn't. url_resetbuf is not even called before the crash (maybe it's
 a problem)

> If not, that would mean we're writing onto a read-only url context?

Ben




More information about the ffmpeg-devel mailing list