aboutsummaryrefslogtreecommitdiff
path: root/libsylph/procmime.c
diff options
context:
space:
mode:
Diffstat (limited to 'libsylph/procmime.c')
-rw-r--r--libsylph/procmime.c20
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;
}