summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars-Dominik Braun <lars@6xq.net>2014-06-21 12:30:41 +0200
committerLars-Dominik Braun <lars@6xq.net>2014-06-21 12:45:57 +0200
commit597b2ec46a3708d50ab9620d5bb4fdbd19cf8a6c (patch)
tree2008804c4b64a105a8751abec2518f039a294609
parent4cd701c94150ed57b8492490dfea983fd9792f73 (diff)
downloadpianobar-597b2ec46a3708d50ab9620d5bb4fdbd19cf8a6c.tar.gz
pianobar-597b2ec46a3708d50ab9620d5bb4fdbd19cf8a6c.tar.bz2
pianobar-597b2ec46a3708d50ab9620d5bb4fdbd19cf8a6c.zip
piano: Fix segfault in GET_STATION_INFO response parser
Pandora added two new integer values to the feedback object, which breaks the assumption that all values are arrays. Since we know the names of the interesting keys (thumbsUp and thumbsDown) just use them instead of iterating over all available keys. Fixes #460.
-rw-r--r--src/libpiano/response.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/libpiano/response.c b/src/libpiano/response.c
index fefa610..b530f3a 100644
--- a/src/libpiano/response.c
+++ b/src/libpiano/response.c
@@ -568,7 +568,14 @@ PianoReturn_t PianoResponse (PianoHandle_t *ph, PianoRequest_t *req) {
json_object *feedback = json_object_object_get (result,
"feedback");
if (feedback != NULL) {
- json_object_object_foreach (feedback, key, val) {
+ static const char * const keys[] = {"thumbsUp", "thumbsDown"};
+ for (size_t i = 0; i < sizeof (keys)/sizeof (*keys); i++) {
+ json_object * const val = json_object_object_get (feedback,
+ keys[i]);
+ if (val == NULL) {
+ continue;
+ }
+ assert (json_object_is_type (val, json_type_array));
for (int i = 0; i < json_object_array_length (val); i++) {
json_object *s = json_object_array_get_idx (val, i);
PianoSong_t *feedbackSong;