nghttpx: Fix error found by coverity scan
This commit is contained in:
parent
4430b06c71
commit
e583a25a8b
14
src/shrpx.cc
14
src/shrpx.cc
|
@ -205,6 +205,7 @@ create_unix_domain_acceptor(ConnectionHandler *handler) {
|
||||||
if (pathlen + 1 > sizeof(addr.un.sun_path)) {
|
if (pathlen + 1 > sizeof(addr.un.sun_path)) {
|
||||||
LOG(FATAL) << "UNIX domain socket path " << path << " is too long > "
|
LOG(FATAL) << "UNIX domain socket path " << path << " is too long > "
|
||||||
<< sizeof(addr.un.sun_path);
|
<< sizeof(addr.un.sun_path);
|
||||||
|
close(fd);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
// copy path including terminal NULL
|
// copy path including terminal NULL
|
||||||
|
@ -213,8 +214,17 @@ create_unix_domain_acceptor(ConnectionHandler *handler) {
|
||||||
// unlink (remove) already existing UNIX domain socket path
|
// unlink (remove) already existing UNIX domain socket path
|
||||||
unlink(path);
|
unlink(path);
|
||||||
|
|
||||||
if (bind(fd, &addr.sa, sizeof(addr.un)) != 0 ||
|
if (bind(fd, &addr.sa, sizeof(addr.un)) != 0) {
|
||||||
listen(fd, get_config()->backlog) != 0) {
|
auto error = errno;
|
||||||
|
LOG(FATAL) << "Failed to bind UNIX domain socket, error=" << error;
|
||||||
|
close(fd);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (listen(fd, get_config()->backlog) != 0) {
|
||||||
|
auto error = errno;
|
||||||
|
LOG(FATAL) << "Failed to listen to UNIX domain socket, error=" << error;
|
||||||
|
close(fd);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -406,47 +406,45 @@ http_parser_settings htp_hooks = {
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
int Http2Session::downstream_read_proxy() {
|
int Http2Session::downstream_read_proxy() {
|
||||||
for (;;) {
|
if (rb_.rleft() == 0) {
|
||||||
if (rb_.rleft() == 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t nread = http_parser_execute(proxy_htp_.get(), &htp_hooks,
|
|
||||||
reinterpret_cast<const char *>(rb_.pos),
|
|
||||||
rb_.rleft());
|
|
||||||
|
|
||||||
rb_.drain(nread);
|
|
||||||
|
|
||||||
auto htperr = HTTP_PARSER_ERRNO(proxy_htp_.get());
|
|
||||||
|
|
||||||
if (htperr == HPE_PAUSED) {
|
|
||||||
switch (state_) {
|
|
||||||
case Http2Session::PROXY_CONNECTED:
|
|
||||||
// we need to increment nread by 1 since http_parser_execute()
|
|
||||||
// returns 1 less value we expect. This means taht
|
|
||||||
// rb_.pos[nread] points to \x0a (LF), which is last byte of
|
|
||||||
// empty line to terminate headers. We want to eat that byte
|
|
||||||
// here.
|
|
||||||
rb_.drain(1);
|
|
||||||
|
|
||||||
// Initiate SSL/TLS handshake through established tunnel.
|
|
||||||
if (initiate_connection() != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
case Http2Session::PROXY_FAILED:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
// should not be here
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (htperr != HPE_OK) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t nread =
|
||||||
|
http_parser_execute(proxy_htp_.get(), &htp_hooks,
|
||||||
|
reinterpret_cast<const char *>(rb_.pos), rb_.rleft());
|
||||||
|
|
||||||
|
rb_.drain(nread);
|
||||||
|
|
||||||
|
auto htperr = HTTP_PARSER_ERRNO(proxy_htp_.get());
|
||||||
|
|
||||||
|
if (htperr == HPE_PAUSED) {
|
||||||
|
switch (state_) {
|
||||||
|
case Http2Session::PROXY_CONNECTED:
|
||||||
|
// we need to increment nread by 1 since http_parser_execute()
|
||||||
|
// returns 1 less value we expect. This means taht
|
||||||
|
// rb_.pos[nread] points to \x0a (LF), which is last byte of
|
||||||
|
// empty line to terminate headers. We want to eat that byte
|
||||||
|
// here.
|
||||||
|
rb_.drain(1);
|
||||||
|
|
||||||
|
// Initiate SSL/TLS handshake through established tunnel.
|
||||||
|
if (initiate_connection() != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
case Http2Session::PROXY_FAILED:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
// should not be here
|
||||||
|
assert(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (htperr != HPE_OK) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Http2Session::downstream_connect_proxy() {
|
int Http2Session::downstream_connect_proxy() {
|
||||||
|
|
Loading…
Reference in New Issue