diff --git a/pdf.c b/pdf.c
index b77d8ce142fe12fb264ec2c851ca4759382e8754..f3485ade1cf50a9dd37e5da9e84e52ad22686fcf 100644
--- a/pdf.c
+++ b/pdf.c
@@ -1810,20 +1810,20 @@ LZWDecode(const Dict *parms, HBytes b, HParser *p)
 	}
 	done = depredict(&pred, cur_lzw_spec->lzw_buf, cur_lzw_spec->write_head-1);
 
-	if(!done)
+	if(done && ret)
 	{
-		// happens if depred() thinks it needs more bytes or when depred is depred_none
-		fprintf(stderr, "LZWDecode: warning, depredict() returns 0, but lzw_decompress finished without error\n");
+		fprintf(stderr, "LZWDecode: Depredict returned zero!\n");
 	}
 
+#ifdef ITERATIVE
+	assert(done); // XXX always 0 if depredict() is depred_none
+#endif
+
 	res = h_parse(p, pred.out, pred.nout);
-	free(pred.out);
 
 	bind_lzw_spec(NULL);
 	delete_lzw_spec(lzw_spec);
-
-	assert(res->ast && res->ast->token_type == TT_BYTES);
-	res = h_parse(p, res->ast->bytes.token, res->ast->bytes.len);
+	free(pred.out);
 
 	return res;
 }