From: Michael Vogt Date: Mon, 22 Nov 2010 09:40:54 +0000 (+0100) Subject: * methods/http.cc: X-Git-Tag: 0.9.13.exp1ubuntu1~223^2 X-Git-Url: https://git.saurik.com/apt.git/commitdiff_plain/08ded4d6a04d28c61a53fe550133b146752badfe?ds=inline;hp=-c * methods/http.cc: - do not hang if Acquire::http::ProxyAutoDetect can not be executed or returns no data (LP: #654393) --- 08ded4d6a04d28c61a53fe550133b146752badfe diff --git a/debian/changelog b/debian/changelog index df4fc1a29..545476459 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +apt (0.8.10) unstable; urgency=low + + * methods/http.cc: + - do not hang if Acquire::http::ProxyAutoDetect can not be + executed or returns no data (LP: #654393) + + -- Michael Vogt Mon, 22 Nov 2010 10:40:45 +0100 + apt (0.8.9) unstable; urgency=low [ Christian Perrier ] diff --git a/methods/http.cc b/methods/http.cc index 25e31de9a..dfc1619e3 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -1349,9 +1349,10 @@ bool HttpMethod::AutoDetectProxy() pid_t Process = ExecFork(); if (Process == 0) { + close(Pipes[0]); dup2(Pipes[1],STDOUT_FILENO); SetCloseExec(STDOUT_FILENO,false); - + const char *Args[2]; Args[0] = AutoDetectProxyCmd.c_str(); Args[1] = 0; @@ -1361,10 +1362,18 @@ bool HttpMethod::AutoDetectProxy() } char buf[512]; int InFd = Pipes[0]; - if (read(InFd, buf, sizeof(buf)) < 0) + close(Pipes[1]); + int res = read(InFd, buf, sizeof(buf)); + ExecWait(Process, "ProxyAutoDetect", true); + + if (res < 0) return _error->Errno("read", "Failed to read"); - ExecWait(Process, "ProxyAutoDetect"); - + if (res == 0) + return _error->Warning("ProxyAutoDetect returned no data"); + + // add trailing \0 + buf[res] = 0; + if (Debug) clog << "auto detect command returned: '" << buf << "'" << endl;