diff options
Diffstat (limited to 'libsylph/procmime.c')
-rw-r--r-- | libsylph/procmime.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/libsylph/procmime.c b/libsylph/procmime.c index 193c23e0..98088ad6 100644 --- a/libsylph/procmime.c +++ b/libsylph/procmime.c @@ -829,6 +829,12 @@ FILE *procmime_decode_content(FILE *outfp, FILE *infp, MimeInfo *mimeinfo) } if (normalize_lbreak) { + if (fflush(tmpfp) == EOF) { + perror("fflush"); + fclose(tmpfp); + if (tmp_file) fclose(outfp); + return NULL; + } rewind(tmpfp); while (fgets(buf, sizeof(buf), tmpfp) != NULL) { #ifdef G_OS_WIN32 @@ -872,6 +878,12 @@ FILE *procmime_decode_content(FILE *outfp, FILE *infp, MimeInfo *mimeinfo) base64_decoder_free(decoder); if (normalize_lbreak) { + if (fflush(tmpfp) == EOF) { + perror("fflush"); + fclose(tmpfp); + if (tmp_file) fclose(outfp); + return NULL; + } rewind(tmpfp); while (fgets(buf, sizeof(buf), tmpfp) != NULL) { #ifdef G_OS_WIN32 @@ -924,6 +936,14 @@ FILE *procmime_decode_content(FILE *outfp, FILE *infp, MimeInfo *mimeinfo) } } + if (fflush(outfp) == EOF) + perror("fflush"); + if (ferror(outfp) != 0) { + g_warning("procmime_decode_content(): Can't write to temporary file\n"); + if (tmp_file) fclose(outfp); + return NULL; + } + if (tmp_file) rewind(outfp); return outfp; } |