From 0775237e40087ee328888eb2b16953dc0cb332e0 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 9 Oct 2008 19:17:33 +0200 Subject: update: fixed stack corruption due to pthread_join() call pthread_join() expects a "pointer to a pointer" parameter, but it got a "pointer to an enum". On AMD64, an enum is smaller than a pointer, leading to a buffer overflow. --- src/update.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/update.c') diff --git a/src/update.c b/src/update.c index 4498449bd..34ec1ba77 100644 --- a/src/update.c +++ b/src/update.c @@ -433,6 +433,7 @@ int directory_update_init(char *path) void reap_update_task(void) { + void *thread_return; enum update_return ret; assert(pthread_equal(pthread_self(), main_task)); @@ -449,8 +450,9 @@ void reap_update_task(void) if (progress != UPDATE_PROGRESS_DONE) return; - if (pthread_join(update_thr, (void **)&ret)) + if (pthread_join(update_thr, &thread_return)) FATAL("error joining update thread: %s\n", strerror(errno)); + ret = (enum update_return)(size_t)thread_return; if (ret == UPDATE_RETURN_UPDATED) playlistVersionChange(); -- cgit v1.2.3