diff --git a/pdf.c b/pdf.c
index 6ea78eb8fef497e24448ba51fd8d32bacc012233..3197c2034b3ab15972b352f9a06776bba478c477 100644
--- a/pdf.c
+++ b/pdf.c
@@ -1653,7 +1653,17 @@ act_ks_value(const HParseResult *p, void *u)
 
 	/* decode and parse the stream data */
 	res = decode_stream(spec->dict, bytes, spec->parser);
-	assert(res != NULL);	// XXX parse failure!
+	if (res == NULL) {
+		HBytes b = {NULL, 0};
+		const HParsedToken *v = dictentry(spec->dict, "Type");
+		if (v != NULL && v->token_type == TT_BYTES)
+			b = v->bytes;
+		if (b.len > INT_MAX)
+			b.len = INT_MAX;
+		fprintf(stderr, "parse error in stream (%*s)\n",
+		    (int)b.len, b.token);
+		// XXX return the undecoded stream (p->ast)?
+	}
 
 	return H_MAKE(HParseResult, res);
 }