Introduction
Introduction Statistics Contact Development Disclaimer Help
tFix null pointer dereference in status - spoon - dwm status utility (2f30 fork)
git clone git://src.adamsgaard.dk/spoon
Log
Files
Refs
LICENSE
---
commit cac2ac13bd99c53ca562157a99befd92ad643a1d
parent 89d58af7a14ee86a7d44d01c069d60fc7307f84f
Author: lostd <[email protected]>
Date: Sun, 20 Nov 2016 13:18:21 +0000
Fix null pointer dereference in status
Also make checking if the connection is alive more robust
and consistent.
Diffstat:
M mpd.c | 27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)
---
diff --git a/mpd.c b/mpd.c
t@@ -25,27 +25,36 @@ mpdread(void *arg, char *buf, size_t len)
struct mpdarg *mpdarg = arg;
static int frame = 0;
+#define CHECK_CONNECTION(conn) \
+ if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS) { \
+ warnx("mpd_connection_get_error: %s", \
+ mpd_connection_get_error_message(conn)); \
+ goto out; \
+ }
+
if (conn == NULL) {
conn = mpd_connection_new(mpdarg->host, mpdarg->port, 0);
if (conn == NULL)
return -1;
- if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS)
- goto out;
+ CHECK_CONNECTION(conn);
}
mpd_send_status(conn);
status = mpd_recv_status(conn);
+ if (status == NULL) {
+ CHECK_CONNECTION(conn);
+ mpd_response_finish(conn);
+ return -1;
+ }
state = mpd_status_get_state(status);
mpd_status_free(status);
- if (!mpd_response_finish(conn))
- goto out;
+ mpd_response_finish(conn);
if (state != MPD_STATE_PLAY && state != MPD_STATE_PAUSE)
return -1;
mpd_send_current_song(conn);
song = mpd_recv_song(conn);
if (song == NULL) {
- if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS)
- goto out;
- /* if no song is playing, reuse connection next time */
+ CHECK_CONNECTION(conn);
+ mpd_response_finish(conn);
return -1;
}
artist = mpd_song_get_tag(song, MPD_TAG_ARTIST, 0);
t@@ -58,11 +67,9 @@ mpdread(void *arg, char *buf, size_t len)
strlcpy(buf, anim[frame++ % LEN(anim)], len);
}
mpd_song_free(song);
- if (!mpd_response_finish(conn))
- goto out;
+ mpd_response_finish(conn);
return 0;
out:
- warnx("failed to talk to mpd");
mpd_connection_free(conn);
conn = NULL;
return -1;
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.