don't flush the input on delete unless encoder state is OK
diff --git a/src/libFLAC/stream_encoder.c b/src/libFLAC/stream_encoder.c
index 14f9139..e1ea04e 100644
--- a/src/libFLAC/stream_encoder.c
+++ b/src/libFLAC/stream_encoder.c
@@ -587,14 +587,22 @@
void FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder)
{
FLAC__ASSERT(0 != encoder);
+
if(encoder->protected_->state == FLAC__STREAM_ENCODER_UNINITIALIZED)
return;
- if(encoder->private_->current_sample_number != 0) {
- encoder->protected_->blocksize = encoder->private_->current_sample_number;
- process_frame_(encoder, true); /* true => is last frame */
+
+ if(encoder->protected_->state == FLAC__STREAM_ENCODER_OK) {
+ if(encoder->private_->current_sample_number != 0) {
+ encoder->protected_->blocksize = encoder->private_->current_sample_number;
+ process_frame_(encoder, true); /* true => is last frame */
+ }
}
+
MD5Final(encoder->private_->metadata.data.stream_info.md5sum, &encoder->private_->md5context);
- encoder->private_->metadata_callback(encoder, &encoder->private_->metadata, encoder->private_->client_data);
+
+ if(encoder->protected_->state == FLAC__STREAM_ENCODER_OK) {
+ encoder->private_->metadata_callback(encoder, &encoder->private_->metadata, encoder->private_->client_data);
+ }
if(encoder->protected_->verify && 0 != encoder->private_->verify.decoder)
FLAC__stream_decoder_finish(encoder->private_->verify.decoder);