diff --git a/lib/connection.js b/lib/connection.js
index <HASH>..<HASH> 100644
--- a/lib/connection.js
+++ b/lib/connection.js
@@ -189,6 +189,9 @@ Connection.prototype._allocateId = function _allocateId(stream, id) {
   stream.id = id;
   this.emit('new_stream', stream, id);
 
+  // * handling stream errors as connection errors
+  stream.on('error', this.emit.bind(this, 'error'));
+
   return id;
 };
 
diff --git a/lib/stream.js b/lib/stream.js
index <HASH>..<HASH> 100644
--- a/lib/stream.js
+++ b/lib/stream.js
@@ -230,6 +230,12 @@ Stream.prototype._receive = function _receive(frame, ready) {
     this._onPriority(frame);
   }
 
+  // * If it's an invalid stream level frame, emit error
+  else if (frame.type !== 'WINDOW_UPDATE') {
+    this._log.error({ frame: frame }, 'Invalid stream level frame');
+    this.emit('error', 'PROTOCOL_ERROR');
+  }
+
   // * Any frame may signal the end of the stream with the END_STREAM flag
   if (frame.flags.END_STREAM) {
     this.push(null);
Stream: rejecting invalid stream level frame with PROTOCOL_ERROR