Skip to content

Fix SelectInterruptPipe::read() being called with fd -1#573

Open
cosminpolifronie wants to merge 1 commit intomachinezone:masterfrom
cosminpolifronie:fix-selectinterruptpipe-read-invalid-pipe
Open

Fix SelectInterruptPipe::read() being called with fd -1#573
cosminpolifronie wants to merge 1 commit intomachinezone:masterfrom
cosminpolifronie:fix-selectinterruptpipe-read-invalid-pipe

Conversation

@cosminpolifronie
Copy link
Copy Markdown

When using IXWebSocket in our enterprise project, we are getting the following valgrind warning.
Pull request #503 is handling this issue by adding a check to the read location.
This pull requests fixes the root cause, where a SelectInterruptPtr is used without being initialized. This SelectInterruptPtr is not needed at all at this moment in the code path, so it has been completely replaced with a nullptr.

Build and tests are passing, and also our enterprise project is not showing the valgrind warning anymore.

Also, to answer #503 (comment), the correct error return value at this place is 0, as the parent class SelectInterrupt also returns 0 (signaling an error).
https://github.com/machinezone/IXWebSocket/blob/master/ixwebsocket/IXSelectInterrupt.cpp#L36

==7952== Warning: invalid file descriptor -1 in syscall read()
==7952==    at 0x4D17ACA: __libc_read (read.c:26)
==7952==    by 0x4D17ACA: read (read.c:24)
==7952==    by 0x16DFCCE: ix::SelectInterruptPipe::read() (IXSelectInterruptPipe.cpp:146)
==7952==    by 0x16DE646: readSelectInterruptRequest (IXSocket.cpp:161)
==7952==    by 0x16DE646: ix::Socket::poll(bool, int, int, std::unique_ptr<ix::SelectInterrupt, std::default_delete<ix::SelectInterrupt> > const&) (IXSocket.cpp:89)
==7952==    by 0x16DFF0E: ix::SocketConnect::connectToAddress(addrinfo const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::function<bool ()> const&) (IXSocketConnect.cpp:71)
==7952==    by 0x16E030D: ix::SocketConnect::connect(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::function<bool ()> const&) (IXSocketConnect.cpp:120)
==7952==    by 0x16DE946: ix::Socket::connect(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::function<bool ()> const&) (IXSocket.cpp:229)
==7952==    by 0x16E2277: ix::WebSocketHandshake::clientHandshake(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ix::CaseInsensitiveLess, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int) (IXWebSocketHandshake.cpp:102)
==7952==    by 0x16D7559: ix::WebSocketTransport::connectToUrl(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ix::CaseInsensitiveLess, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&, int) (IXWebSocketTransport.cpp:142)
==7952==    by 0x16D216F: ix::WebSocket::connect(int) (IXWebSocket.cpp:233)
==7952==    by 0x16D2B02: ix::WebSocket::checkConnection(bool) (IXWebSocket.cpp:342)
==7952==    by 0x16D1C6F: ix::WebSocket::run() (IXWebSocket.cpp:384)
==7952==    by 0x4A3ADB3: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant