diff options
author | Max Kellermann <max@duempel.org> | 2014-12-14 15:09:55 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-12-14 15:16:01 +0100 |
commit | 4b8d258cff85678c7ac90c03e337f9316e1f7b98 (patch) | |
tree | 6b33c21f6f2506262753790b94d857a322b21b61 | |
parent | 3c29aa62713126ebe8cc6f020fe8d896b7164ae3 (diff) | |
download | mpd-4b8d258cff85678c7ac90c03e337f9316e1f7b98.tar.gz mpd-4b8d258cff85678c7ac90c03e337f9316e1f7b98.tar.xz mpd-4b8d258cff85678c7ac90c03e337f9316e1f7b98.zip |
lib/nfs/Connection: fix crash while canceling a failing Open()
The method NfsConnection::CancellableCallback::Callback() will always
invoke NfsConnection::Close() on the file handle, even if the void
pointer is not a nfsfh. This can happen if the Open() was not
successful, e.g. when the file does not exist.
Diffstat (limited to '')
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | src/lib/nfs/Connection.cxx | 6 |
2 files changed, 6 insertions, 2 deletions
@@ -1,4 +1,6 @@ ver 0.19.7 (not yet released) +* input + - nfs: fix crash while canceling a failing file open operation * playlist - don't skip non-existent songs in "listplaylist" * fix memory allocator bug on Windows diff --git a/src/lib/nfs/Connection.cxx b/src/lib/nfs/Connection.cxx index 410711275..c57cb9b79 100644 --- a/src/lib/nfs/Connection.cxx +++ b/src/lib/nfs/Connection.cxx @@ -156,8 +156,10 @@ NfsConnection::CancellableCallback::Callback(int err, void *data) allocated file handle immediately */ assert(close_fh == nullptr); - struct nfsfh *fh = (struct nfsfh *)data; - connection.Close(fh); + if (err >= 0) { + struct nfsfh *fh = (struct nfsfh *)data; + connection.Close(fh); + } } else if (close_fh != nullptr) connection.DeferClose(close_fh); |