aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-12-14 15:09:55 +0100
committerMax Kellermann <max@duempel.org>2014-12-14 15:16:01 +0100
commit4b8d258cff85678c7ac90c03e337f9316e1f7b98 (patch)
tree6b33c21f6f2506262753790b94d857a322b21b61
parent3c29aa62713126ebe8cc6f020fe8d896b7164ae3 (diff)
downloadmpd-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.
-rw-r--r--NEWS2
-rw-r--r--src/lib/nfs/Connection.cxx6
2 files changed, 6 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index b40023771..c1f967b74 100644
--- a/NEWS
+++ b/NEWS
@@ -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);