Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
05ad335ae9 | ||
![]() |
7faeb2ff2b | ||
![]() |
fdd76b3461 | ||
![]() |
e490e5d0ab | ||
![]() |
3a05c421e0 | ||
![]() |
afc70c120e | ||
![]() |
d7f80eab68 | ||
![]() |
e30b356eb0 | ||
![]() |
09a0803116 | ||
![]() |
20ffedc745 | ||
![]() |
0b1ad27ba8 | ||
![]() |
6a1b2f0387 |
10
NEWS
10
NEWS
@@ -1,3 +1,13 @@
|
||||
ver 0.18.7 (2013/01/13)
|
||||
* playlist
|
||||
- pls: fix crash after parser error
|
||||
- soundcloud: fix build failure with libyajl 2.0.1
|
||||
* decoder
|
||||
- faad: fix memory leak
|
||||
- mpcdec: reject libmpcdec SV7 in configure script
|
||||
* daemon: don't initialize supplementary groups when already running
|
||||
as the configured user
|
||||
|
||||
ver 0.18.6 (2013/12/24)
|
||||
* input
|
||||
- cdio_paranoia: support libcdio-paranoia 0.90
|
||||
|
@@ -1,6 +1,6 @@
|
||||
AC_PREREQ(2.60)
|
||||
|
||||
AC_INIT(mpd, 0.18.6, musicpd-dev-team@lists.sourceforge.net)
|
||||
AC_INIT(mpd, 0.18.7, musicpd-dev-team@lists.sourceforge.net)
|
||||
|
||||
VERSION_MAJOR=0
|
||||
VERSION_MINOR=18
|
||||
@@ -732,7 +732,7 @@ dnl --------------------------------- Soundcloud ------------------------------
|
||||
if test x$enable_soundcloud != xno; then
|
||||
PKG_CHECK_MODULES([YAJL], [yajl >= 2.0],
|
||||
[found_soundcloud=yes],
|
||||
AC_CHECK_LIB([yajl], [yajl_alloc],
|
||||
AC_CHECK_LIB([yajl], [yajl_parse_complete],
|
||||
[found_soundcloud=yes YAJL_CFLAGS=-DHAVE_YAJL1 YAJL_LIBS=-lyajl],
|
||||
[found_soundcloud=no]))
|
||||
fi
|
||||
@@ -960,7 +960,7 @@ AM_CONDITIONAL(ENABLE_SNDFILE, test x$enable_sndfile = xyes)
|
||||
|
||||
dnl --------------------------------- musepack --------------------------------
|
||||
|
||||
MPD_AUTO_LIB(mpc, MPCDEC, mpcdec, main, [-lmpcdec], [],
|
||||
MPD_AUTO_LIB(mpc, MPCDEC, mpcdec, mpc_demux_init, [-lmpcdec], [],
|
||||
[mpcdec], [libmpcdec not found])
|
||||
if test x$enable_mpc = xyes; then
|
||||
AC_DEFINE(HAVE_MPCDEC, 1, [Define to use libmpcdec for MPC decoding])
|
||||
|
@@ -829,7 +829,7 @@ systemctl start mpd.socket</programlisting>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>
|
||||
<varname>default_bute_order</varname>
|
||||
<varname>default_byte_order</varname>
|
||||
<parameter>little_endian|big_endian</parameter>
|
||||
</entry>
|
||||
<entry>
|
||||
|
@@ -52,7 +52,7 @@ static char *user_name;
|
||||
static uid_t user_uid = (uid_t)-1;
|
||||
|
||||
/** the Unix group id which MPD runs as */
|
||||
static gid_t user_gid = (pid_t)-1;
|
||||
static gid_t user_gid = (gid_t)-1;
|
||||
|
||||
/** the absolute path of the pidfile */
|
||||
static AllocatedPath pidfile = AllocatedPath::Null();
|
||||
@@ -106,18 +106,21 @@ daemonize_set_user(void)
|
||||
return;
|
||||
|
||||
/* set gid */
|
||||
if (user_gid != (gid_t)-1 && user_gid != getgid()) {
|
||||
if (setgid(user_gid) == -1) {
|
||||
FormatFatalSystemError("Failed to set group %d",
|
||||
(int)user_gid);
|
||||
}
|
||||
if (user_gid != (gid_t)-1 && user_gid != getgid() &&
|
||||
setgid(user_gid) == -1) {
|
||||
FormatFatalSystemError("Failed to set group %d",
|
||||
(int)user_gid);
|
||||
}
|
||||
|
||||
#ifdef _BSD_SOURCE
|
||||
/* init suplementary groups
|
||||
/* init supplementary groups
|
||||
* (must be done before we change our uid)
|
||||
*/
|
||||
if (!had_group && initgroups(user_name, user_gid) == -1) {
|
||||
if (!had_group &&
|
||||
/* no need to set the new user's supplementary groups if
|
||||
we are already this user */
|
||||
user_uid != getuid() &&
|
||||
initgroups(user_name, user_gid) == -1) {
|
||||
FormatFatalSystemError("Failed to set supplementary groups "
|
||||
"of user \"%s\"",
|
||||
user_name);
|
||||
|
@@ -393,6 +393,7 @@ faad_stream_decode(Decoder &mpd_decoder, InputStream &is)
|
||||
if (!ret) {
|
||||
LogError(error);
|
||||
NeAACDecClose(decoder);
|
||||
decoder_buffer_free(buffer);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -461,6 +462,7 @@ faad_stream_decode(Decoder &mpd_decoder, InputStream &is)
|
||||
/* cleanup */
|
||||
|
||||
NeAACDecClose(decoder);
|
||||
decoder_buffer_free(buffer);
|
||||
}
|
||||
|
||||
static bool
|
||||
|
@@ -68,7 +68,6 @@ pls_parser(GKeyFile *keyfile, std::forward_list<SongPointer> &songs)
|
||||
FormatError(pls_domain, "Invalid PLS entry %s: '%s'",
|
||||
key, error->message);
|
||||
g_error_free(error);
|
||||
g_free(key);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -32,7 +32,8 @@ const char *
|
||||
uri_get_suffix(const char *uri)
|
||||
{
|
||||
const char *suffix = strrchr(uri, '.');
|
||||
if (suffix == nullptr)
|
||||
if (suffix == nullptr || suffix == uri ||
|
||||
suffix[-1] == '/' || suffix[-1] == '\\')
|
||||
return nullptr;
|
||||
|
||||
++suffix;
|
||||
|
@@ -29,6 +29,10 @@ public:
|
||||
"jpg"));
|
||||
CPPUNIT_ASSERT_EQUAL(0, strcmp(uri_get_suffix("/foo.png/bar.jpg"),
|
||||
"jpg"));
|
||||
CPPUNIT_ASSERT_EQUAL((const char *)nullptr,
|
||||
uri_get_suffix(".jpg"));
|
||||
CPPUNIT_ASSERT_EQUAL((const char *)nullptr,
|
||||
uri_get_suffix("/foo/.jpg"));
|
||||
}
|
||||
|
||||
void TestRemoveAuth() {
|
||||
|
Reference in New Issue
Block a user