Philipp Hörist pushed to branch master at gajim / python-nbxmpp


Commits:
84742678 by Philipp Hörist at 2023-05-28T14:47:44+02:00
fix: HTTP: Abort correctly on content overflow

- - - - -


2 changed files:

- nbxmpp/http.py
- test/unit/test_http.py


Changes:

=====================================
nbxmpp/http.py
=====================================
@@ -373,7 +373,8 @@ class HTTPRequest(GObject.GObject):
             return
 
         self._received_size += len(bytes_)
-        self._check_content_overflow()
+        if self._check_content_overflow():
+            return
 
         if self._output_stream is None:
             self._response_body_data += bytes_
@@ -447,9 +448,11 @@ class HTTPRequest(GObject.GObject):
         self.emit('response-progress',
                   self._received_size / self._response_content_length)
 
-    def _check_content_overflow(self) -> None:
+    def _check_content_overflow(self) -> bool:
         if self._received_size > self._response_content_length:
             self._finish_read(HTTPRequestError.CONTENT_OVERFLOW)
+            return True
+        return False
 
     def _on_restarted(self, _message: Soup.Message) -> None:
         self._log.info('Restarted')


=====================================
test/unit/test_http.py
=====================================
@@ -236,6 +236,30 @@ class HTTP(unittest.TestCase):
         self.assertTrue(request4.is_finished())
         self.assertTrue(request4.is_complete())
 
+    def test_content_overflow(self):
+
+        mainloop = GLib.MainLoop()
+
+        session = HTTPSession()
+        request = session.create_request()
+
+
+        def _on_starting(req) -> None:
+            req._received_size = 100000000000
+
+        callback_mock = Mock()
+        request.connect('starting-response-body', _on_starting)
+        request.connect('finished', callback_mock.finished)
+        request.connect('destroy', lambda *args: mainloop.quit())
+        request.send('GET', SMALL_FILE_URL, timeout=10)
+
+        mainloop.run()
+
+        self.assertTrue(request.is_finished())
+        self.assertFalse(request.is_complete())
+        self.assertEqual(request.get_error(), 
HTTPRequestError.CONTENT_OVERFLOW)
+
+        callback_mock.finished.assert_called()
 
 if __name__ == '__main__':
     unittest.main()



View it on GitLab: 
https://dev.gajim.org/gajim/python-nbxmpp/-/commit/84742678227a6153120393366bca6af67f09ac25

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/python-nbxmpp/-/commit/84742678227a6153120393366bca6af67f09ac25
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to