1. 23 Sep, 2008 27 commits
  2. 17 Sep, 2008 2 commits
    • Max Kellermann's avatar
      mp3: fix buffer overflow when max_frames is too large · 913028a7
      Max Kellermann authored
      The function decodeFirstFrame() allocates memory based on data from
      the mp3 header.  This can make the buffer size allocation overflow, or
      lead to a DoS attack with a very large buffer.  Cap this buffer at 8
      million frames, which should really be enough for reasonable files.
      913028a7
    • Max Kellermann's avatar
      client: check expired after client_process_line() · ef0e2fdc
      Max Kellermann authored
      The assertion on "!client_is_expired(client)" was wrong, because
      writing the command response may cause the client to become expired.
      Replace that assertion with a check.
      ef0e2fdc
  3. 12 Sep, 2008 11 commits
    • Terry's avatar
      mp4: fix potential integer overflow bug in the mp4_decode() function · 79a14c9a
      Terry authored
      A crafted mp4 file could cause an integer overflow in mp4_decode
      function in src/inputPlugins/mp4_plugin.c.  mp4ff_num_samples()
      function returns some tainted value. sizeof(float) * numSamples is an
      integer overflow operation if numSamples is too huge, so xmalloc will
      allocate a small memory region.  I constructe a mp4 file, and use
      faad2 to open the file. mp4ff_num_samples() returns -1. So I think mpd
      bears from the same problem.
      79a14c9a
    • Max Kellermann's avatar
      shout: don't write empty buffers · 89c8b19a
      Max Kellermann authored
      Add a check to write_page() which checks if there is actually data.
      Don't bother to call shout_send() if there is not.
      89c8b19a
    • Max Kellermann's avatar
      shout: removed clear_shout_buffer() · 42f61771
      Max Kellermann authored
      The function is trivial, without a benefit.  Also don't initialize
      buf.data[0], this is not a null terminated string.
      42f61771
    • Max Kellermann's avatar
      shout: make the shout_buffer static · 265b8fff
      Max Kellermann authored
      Since the buffer size is known at compile time, we can save an
      indirection by declaring it as a char array instead of a pointer.
      That saves an extra allocation, and we can calculate with the
      compile-time constant sizeof(data) instead of the attribute "max_len".
      265b8fff
    • Max Kellermann's avatar
      shout: constant plugin declarations · ebd19499
      Max Kellermann authored
      Declare both shout plugins "const", since they will never change, once
      initialized at compile time.
      ebd19499
    • Max Kellermann's avatar
      shout: static encoder plugin list · d9f170b5
      Max Kellermann authored
      Shout encoder plugins are known at compile time.  There is no reason
      to use a complex data structure as "List" to manage them at runtime -
      just put the pointers into a static array.
      d9f170b5
    • Max Kellermann's avatar
      shout: removed typedefs on structs and plugin methods · a84de9b0
      Max Kellermann authored
      Don't typedef the structs at all.  It is easier to forward-declare
      this way.
      
      Don't typedef methods.  They are used exactly once, a few lines below.
      a84de9b0
    • Eric Wollesen's avatar
      shout: added mp3 encoder · 5f8eebd1
      Eric Wollesen authored
      [mk: moved this patch after "Refactor and cleanup of shout Ogg and MP3
      audio outputs".  The original commit message follows, although it is
      outdated:]
      
      Creation of shout_mp3 audio output plugin. Basically I just copied the
      existing shout plugin and replaced ogg with lame. Uses lame for mp3
      encoding. Next step is to pull common functionality out of each shout
      plugin and share it between them.
      
      Configuration options for "shout_mp3" are the same as for "shout".
      5f8eebd1
    • Eric Wollesen's avatar
      shout: introduce pluggable encoder API · 4970c42c
      Eric Wollesen authored
      I've perhaps gone a bit overboard, but here's the current rundown:
      
      Both Ogg and MP3 use the "shout" audio output plugin.  The shout audio
      output plugin itself has two new plugins, one for the Ogg encoder,
      and another for the MP3 (LAME) encoder.
      
      Configuration for an Ogg stream doesn't change.  For an MP3 stream,
      configuration is the same as Ogg, with two exceptions.  First, you must
      specify the optional "encoding" parameter, which should be set to "mp3".
      See mpd.conf(5) for more details.  Second, the "quality" parameter is
      reversed for LAME, such that 1 is high quality for LAME, whereas 10 is
      high quality for Ogg.
      
      I've decomposed the code so that all libshout related operations
      are done in audioOutput_shout.c, all Ogg specific functions are in
      audioOutput_shout_ogg.c, and of course then all LAME specific functions
      are handled in audioOutput_shout_mp3.c.
      
      To develop encoder plugins for the shout audio output plugin, I basically
      just mimicked the plugin system used for audio outputs.  This might be
      overkill, but hopefully if anyone ever wants to support some other sort
      of stream, like maybe AAC, FLAC, or WMA (hey it could happen), they will
      hopefully be all set.
      
      The Ogg encoder is slightly less optimal under this configuration.
      It used to send shout data directly out of its ogg_page structures.  Now,
      in the interest of encapsulation, it copies the data from its ogg_page
      structures into a buffer provided by the shout audio output plugin (see
      audioOutput_shout_ogg.c, line 77.)  I suspect the performance impact
      is negligible.
      
      As for metadata, I'm pretty sure they'll both work.  I wrote up a test
      scaffold that would create a fake tag, and tell the plugin to send it
      out to the stream every few seconds.  It seemed to work fine.  Of course,
      if something does break, I'll be glad to fix it.
      
      Lastly, I've renamed lots of things into snake_case, in keeping with
      normalperson's wishes in that regard.
      
      [mk: moved the MP3 patch after this one.  Splitted this patch into
      several parts; the others were already applied before this one.  Fixed
      a bunch GCC warnings and wrong whitespace modifications.  Made it
      compile with mpd-mk by adapting to its prototypes]
      4970c42c
    • Eric Wollesen's avatar
      shout: send shout metadata · 43ee3c3b
      Eric Wollesen authored
      Support sending metadata to a shout server using shout_metadata_new()
      and shout_metadata_add().  The Ogg Vorbis encoder does not support
      this currently.
      
      [mk: this patch was separated from Eric's patch "Refactor and cleanup
      of shout Ogg and MP3 audio outputs", I added a description]
      43ee3c3b
    • Max Kellermann's avatar
      shout: added struct _ogg_vorbis_data · 1333c392
      Max Kellermann authored
      Preparing the merge of Eric Wollesen's patch "Refactor and cleanup of
      shout Ogg and MP3 audio outputs": we declare one of the struct types
      here, to make the merge smoother.
      1333c392