diff --git a/src/http.cpp b/src/http.cpp
index 0017b0d05593ab844051c44e0051188fd51675d8..abb9611be24fefb837e767852af1f63dbce28762 100644
--- a/src/http.cpp
+++ b/src/http.cpp
@@ -874,7 +874,7 @@ Request::terminate(const asio::error_code& ec)
         logger_->e("[http:request:%i] end with error: %s", id_, ec.message().c_str());
 
     // set response outcome, ignore end of file and abort
-    if (!ec or ec == asio::error::eof)
+    if ((!ec or ec == asio::error::eof) and parser_)
         response_.status_code = parser_->status_code;
     else
         response_.status_code = 0;
@@ -882,7 +882,7 @@ Request::terminate(const asio::error_code& ec)
     response_.aborted = ec == asio::error::operation_aborted;
 
     if (logger_)
-        logger_->d("[http:request:%i] done with status code %u", id_, parser_->status_code);
+        logger_->d("[http:request:%i] done with status code %u", id_, response_.status_code);
     if (connection_type_ != restinio::http_connection_header_t::keep_alive)
         if (auto c = conn_)
             c->close();