nghttpx: Fix error found by coverity scan

This commit is contained in:
Tatsuhiro Tsujikawa 2015-02-22 17:53:12 +09:00
parent 4430b06c71
commit e583a25a8b
2 changed files with 49 additions and 41 deletions

View File

@ -205,6 +205,7 @@ create_unix_domain_acceptor(ConnectionHandler *handler) {
if (pathlen + 1 > sizeof(addr.un.sun_path)) {
LOG(FATAL) << "UNIX domain socket path " << path << " is too long > "
<< sizeof(addr.un.sun_path);
close(fd);
return nullptr;
}
// copy path including terminal NULL
@ -213,8 +214,17 @@ create_unix_domain_acceptor(ConnectionHandler *handler) {
// unlink (remove) already existing UNIX domain socket path
unlink(path);
if (bind(fd, &addr.sa, sizeof(addr.un)) != 0 ||
listen(fd, get_config()->backlog) != 0) {
if (bind(fd, &addr.sa, sizeof(addr.un)) != 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;
}

View File

@ -406,47 +406,45 @@ http_parser_settings htp_hooks = {
} // namespace
int Http2Session::downstream_read_proxy() {
for (;;) {
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;
}
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;
}
int Http2Session::downstream_connect_proxy() {