| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
The FLAC replaygain parser used the "||" operator. This made the code
stop after the first value which was found.
|
|
|
|
|
| |
When one metadata check fails, return quickly. This removes 2 levels
of indent.
|
|
|
|
| |
This belongs into "git annotate" or AUTHORS.
|
|
|
|
|
|
|
| |
When libid3tag is disabled, the libmad decoder plugin is unable to
identify ID3 frames. If the file starts with an (unidentified) ID3
frame, it assumes that the file is not a valid MP3 song. This patch
solves this by adding minimal stubs for the ID3 functions.
|
|
|
|
|
|
| |
The function tag_ape_load() retrieves a 32 bit unsigned integer from
the input file, and passes it to g_malloc(). This is dangerous, and
may be used for a denial of service attack on MPD.
|
|
|
|
|
| |
Extend the tagLen check after reading it. Removed the second
(redundant) check after the subtraction.
|
|
|
|
|
|
|
| |
The expression "tagLen - size > 0" may result in an integer underflow
and a buffer overflow, when "size" is larger than "tagLen". "size" is
read from the input file, and must not be trusted. This patch changes
the expression to "tagLen > size", which is a lot safer.
|
|
|
|
|
| |
The first patch by Patrick didn't work, because his "#ifdef HAVE_OSX"
line would have required config.h.
|
|
|
|
|
|
| |
Initialize flac_data.tag right after flac_data_init(). This way, the
"goto fail" won't jump to the point where tag_free(NULL) can be
called.
|
|
|
|
|
|
| |
On Mac OS X, the httpd plugin cannot be compiled, because OS X's
system headers do nto include sys/types.h, although they use
u_int32_t.
|
| |
|
|
|
|
|
| |
Don't free an internal configuration value in log_init(). Call
config_get_path() instead of manually calling parsePath().
|
|
|
|
|
|
|
| |
When the filesystem_charset is changed in mpd.conf, MPD should discard
the old database. In this error branch, MPD did not fill the GError
object properly, and logged a warning message instead, which caused a
segmentation fault.
|
|
|
|
|
| |
When the PAUSE loop ends, re-check the next command before calling
ao_play() again.
|
|
|
|
|
|
|
|
| |
When MPD was paused, and the client sent the "stop" command (or
"clear"), a glitch caused MPD to continue playback for a split second.
This was because audio_output_all_cancel() calls
audio_output_all_update(), which reopens all output devices, and
re-ignites the playback loop.
|
|
|
|
|
|
|
|
|
| |
When decoding a local file, the decoder thread tries to run all
matching decoders, until one succeeds. Both file_decode() and
stream_decode() can decode a stream, but MPD closes the stream before
calling file_decode(). Problem is: when this decoder fails, and the
next's stream_decode() method is invoked, the input_stream is still
closed. This patch reopens it.
|
|
|
|
|
|
|
|
|
| |
Several users had problems with binding MPD to "localhost". The cause
was duplicate /etc/hosts entries: the resolver library returns
127.0.0.1 twice, and of course, MPD attempts to bind to "both" of
them. This patch makes failures non-fatal, given that at least one
address was bound successfully. This is a workaround; users should
rather fix their /etc/hosts file.
|
| |
|
|
|
|
| |
Dump each socket address before binding to it.
|
| |
|
|
|
|
|
| |
This warning is useless. I assume the author added it for debugging
purposes.
|
|
|
|
|
|
|
| |
When client_defer_output() aborts the connection to the client,
client_write_output() called client_write_deferred() anyway. This
caused an assertion failure. Fix it by checking for the "expired"
flag again after client_defer_output() returns.
|
|
|
|
|
|
| |
I'm hunting down a bug where client->channel==NULL during I/O
operations. These new assertions help avoid this kind of bug in the
future.
|
| |
|
| |
|
|
|
|
| |
Renamed all remaining CamelCase functions.
|
|
|
|
|
|
| |
When the decoder is finished, break out of the player loop only after
another player.pipe check. We did check the pipe size a few lines
above, but that check was kind of racy.
|
|
|
|
|
|
|
| |
When a music_chunk only contains a tag but no PCM data, play_chunk()
returns true without freeing the chunk. The caller now assumes that
the chunk is moved into some music_pipe and does not bother to free it
either.
|
|
|
|
|
|
| |
To check for leaked music_chunk objects, free the music buffer on
CLOSE_AUDIO. This invokes an assertion check which ensures that all
chunks have been returned to the buffer.
|
|
|
|
|
|
| |
Instead of returning the local variable "ret" which is always true at
this point, hard-code the "true" return value, because that might be
more readable.
|
|
|
|
|
|
|
|
| |
If a file is removed the library, next time mpd will try to play it it
will result in an error 'ERROR: problems decoding some/file.ogg'.
Nothing is written in log files (verbose mode or not)
[mk: append strerror(errno)]
|
|
|
|
|
| |
Make gcc warn us if we add a new mixer type, and forget to add a new
"case" line.
|
|
|
|
| |
Don't use CPP macros when you can use C enums.
|
| |
|
|
|
|
|
|
| |
Commit f78cddb4 introduced a regression: when the playlist reached its
end, MPD did not reset the "current song" pointer anymore after stop.
Add a "current = -1" code line.
|
|
|
|
| |
Check the validity of the audio_format during write operations.
|
|
|
|
| |
Always assert that the audio format of the new chunk is valid.
|
|
|
|
|
|
|
|
|
|
| |
Hello,
While compiling latest git I've received a compile error in the
httpd_output_plugin.
Small patch attached.
Patrik
|
|
|
|
| |
The string comparison should be "!= 0", not "== 0". Ouch.
|
|
|
|
|
| |
The player thread must reset pc.next_song after seeking, even if that
operation has failed. This patch adds an assertion.
|
|
|
|
|
|
| |
The only pc_seek() caller clears the error, rendering the check
useless. Even if the previous PLAY command resulted in a player
error, this check is not very useful.
|
|
|
|
|
| |
Renamed playerSeek() to pc_seek() to get rid of CamelCase. Convert
the return value to bool.
|
|
|
|
|
| |
If the UFID frame's owner is "http://musicbrainz.org", assume its
value is the MusicBrainz track id.
|
|
|
|
|
|
|
|
| |
Flush the encoder before calling encoder_tag(). The first page
generated by the encoder after sending the tag will be the new
"header" page, which is sent to all HTTP clients when they connect.
This is a little bit specific to the vorbis encoder, but there are no
other encoders which support tags (yet).
|
|
|
|
|
|
| |
Moved some code from httpd_output_encode_and_play() into separate
functions httpd_output_broadcast_page() and
httpd_output_encoder_to_clients().
|
|
|
|
|
|
| |
There's no reason to send both encoder tags and Icy-Metadata to the
client. Let's disable Icy-Metadata when the encoder supports embedded
tags.
|
|
|
|
|
|
|
| |
When a new tag is set, end the current stream and begin a new one.
Use vorbis_analysis_headerout() to write a full ogg header. This
fixes a problem with icecast: after a song change in MPD, icecast
stops forwarding ogg packets to its clients.
|
| |
|
|
|
|
|
| |
In the tag() method, MPD guarantees that it does not pass tag==NULL.
Converted the runtime check to an assertion.
|
|
|
|
|
| |
The second parameter of zzip_dir_open() is a pointer. Pass the NULL
pointer instead of 0 (with implicit conversion at compile time).
|