Commit 4a9ffad3 authored by Jeff VanDyke's avatar Jeff VanDyke

Close 2 file descriptors opened from serveFile - avoid crash

parent fcb83f89
...@@ -156,10 +156,11 @@ struct Buffer { ...@@ -156,10 +156,11 @@ struct Buffer {
}; };
struct FileBuffer { struct FileBuffer {
FileBuffer() { } FileBuffer() = delete;
FileBuffer(const char* fileName); FileBuffer(const char* fileName);
FileBuffer(const std::string& fileName); FileBuffer(const std::string& fileName);
~FileBuffer();
std::string fileName() const { return fileName_; } std::string fileName() const { return fileName_; }
Fd fd() const { return fd_; } Fd fd() const { return fd_; }
......
...@@ -675,6 +675,7 @@ serveFile(ResponseWriter& response, const char* fileName, const Mime::MediaType& ...@@ -675,6 +675,7 @@ serveFile(ResponseWriter& response, const char* fileName, const Mime::MediaType&
} }
int res = ::fstat(fd, &sb); int res = ::fstat(fd, &sb);
close(fd); // Done with fd, close before error can be thrown
if (res == -1) { if (res == -1) {
throw HttpError(Code::Internal_Server_Error, ""); throw HttpError(Code::Internal_Server_Error, "");
} }
......
...@@ -16,17 +16,23 @@ ...@@ -16,17 +16,23 @@
namespace Pistache { namespace Pistache {
FileBuffer::FileBuffer(const char* fileName) FileBuffer::FileBuffer(const char* fileName)
: fileName_(fileName) : fileName_(fileName), fd_(-1)
{ {
init(fileName); init(fileName);
} }
FileBuffer::FileBuffer(const std::string& fileName) FileBuffer::FileBuffer(const std::string& fileName)
: fileName_(fileName) : fileName_(fileName), fd_(-1)
{ {
init(fileName.c_str()); init(fileName.c_str());
} }
FileBuffer::~FileBuffer()
{
if (fd_ > -1)
close(fd_);
}
void void
FileBuffer::init(const char* fileName) FileBuffer::init(const char* fileName)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment