diff options
author | Michael Vogt <mvo@ubuntu.com> | 2014-10-08 08:37:01 +0200 |
---|---|---|
committer | Michael Vogt <mvo@ubuntu.com> | 2014-10-08 08:37:01 +0200 |
commit | 0c158e03ceb509a08d3d4ded79c3151237f669dd (patch) | |
tree | dc7a5cf8f15a7907d00beb75b5fa4d246ec3d36a /methods/http.cc | |
parent | a943fbf21ca0b9b58b8f1492fc518679b1d7c749 (diff) | |
parent | f2b47ba290f3a178c584da83f007cf0f720baabb (diff) |
Merge remote-tracking branch 'mvo/feature/expected-size' into debian/experimental
Diffstat (limited to 'methods/http.cc')
-rw-r--r-- | methods/http.cc | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/methods/http.cc b/methods/http.cc index f2a4a4db6..c00b439b7 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -64,7 +64,8 @@ const unsigned int CircleBuf::BW_HZ=10; // CircleBuf::CircleBuf - Circular input buffer /*{{{*/ // --------------------------------------------------------------------- /* */ -CircleBuf::CircleBuf(unsigned long long Size) : Size(Size), Hash(0) +CircleBuf::CircleBuf(unsigned long long Size) + : Size(Size), Hash(0), TotalWriten(0) { Buf = new unsigned char[Size]; Reset(); @@ -80,6 +81,7 @@ void CircleBuf::Reset() InP = 0; OutP = 0; StrPos = 0; + TotalWriten = 0; MaxGet = (unsigned long long)-1; OutQueue = string(); if (Hash != 0) @@ -217,6 +219,8 @@ bool CircleBuf::Write(int Fd) return false; } + + TotalWriten += Res; if (Hash != 0) Hash->Add(Buf + (OutP%Size),Res); @@ -651,6 +655,13 @@ bool HttpServerState::Go(bool ToFile, FileFd * const File) return _error->Errno("write",_("Error writing to output file")); } + if (MaximumSize > 0 && File && File->Tell() > MaximumSize) + { + Owner->SetFailReason("MaximumSizeExceeded"); + return _error->Error("Writing more data than expected (%llu > %llu)", + File->Tell(), MaximumSize); + } + // Handle commands from APT if (FD_ISSET(STDIN_FILENO,&rfds)) { |