diff --git a/src/scrambler-istream.c b/src/scrambler-istream.c
index 586d4c395966febf5f8794140094420e39bec83e..8fa9fe754f972b6da94ed0f05a7e586a192b85e4 100644
--- a/src/scrambler-istream.c
+++ b/src/scrambler-istream.c
@@ -19,6 +19,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <assert.h>
 #include <arpa/inet.h>
 #include <inttypes.h>
 
@@ -138,6 +139,8 @@ scrambler_istream_read_detect(struct scrambler_istream *sstream)
 
   result = scrambler_istream_read_parent(sstream, MAGIC_SIZE, 0);
   if (result <= 0) {
+    /* Make sure we return an error here. */
+    result = -1;
     goto end;
   }
   source = i_stream_get_data(stream->parent, &source_size);
@@ -331,6 +334,9 @@ scrambler_istream_read(struct istream_private *stream)
     return scrambler_istream_read_decrypt(sstream);
   case ISTREAM_MODE_PLAIN:
     return scrambler_istream_read_plain(sstream);
+  case ISTREAM_MODE_DETECT:
+    /* Something went terribly wrong. */
+    assert(0);
   default:
     /* Should not happened in theory! */
     return -1;