aboutsummaryrefslogtreecommitdiff
path: root/mail/fetchmail/files/patch-ZZZ-87626c2707cc0d82e49e160ab3c85430ff33534f
blob: 3c6d085a19c91c1da2a1906b85cc66a82dee3903 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
From 87626c2707cc0d82e49e160ab3c85430ff33534f Mon Sep 17 00:00:00 2001
From: Matthias Andree <matthias.andree@gmx.de>
Date: Sat, 24 Aug 2019 17:53:08 +0200
Subject: [PATCH] Properly report size of mailboxes of 2 GibiB or above.

To fix Debian Bug#873668, reported by Andreas Schmidt.
This requires C99's new long long type.
---
 NEWS        | 7 +++++++
 driver.c    | 7 ++++---
 etrn.c      | 2 +-
 fetchmail.h | 2 +-
 imap.c      | 2 +-
 odmr.c      | 2 +-
 pop2.c      | 2 +-
 pop3.c      | 4 ++--
 8 files changed, 18 insertions(+), 10 deletions(-)

diff -up work/fetchmail-6.4.10/NEWS.orig work/fetchmail-6.4.10/NEWS
--- a/NEWS
+++ b/NEWS
@@ -63,7 +63,13 @@ removed from a 6.5.0 or newer release.)
 * Fetchmail does not guarantee compatibility with EOL OpenSSL versions. Support
   for end-of-life OpenSSL versions may be removed even from patchlevel releases.
 
----------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+## BUG FIXES
+* fetchmail can now report mailbox sizes of 2^31 octets and beyond.
+  This requires C99 support (for the long long type).
+  Fixes Debian Bug#873668, reported by Andreas Schmidt.
+
+--------------------------------------------------------------------------------
 fetchmail-6.4.10 (released 2020-08-27, 27596 LoC):
 
 # REGRESSION FIX:
diff --git a/driver.c b/driver.c
index d21a32ab..a5033729 100644
--- a/driver.c
+++ b/driver.c
@@ -932,7 +932,7 @@ static int do_session(
     {
 	/* sigsetjmp returned zero -> normal operation */
 	char buf[MSGBUFSIZE+1], *realhost;
-	int count, newm, bytes;
+	int count, newm;
 	int fetches, dispatches, transient_errors, oldphase;
 	struct idlist *idp;
 
@@ -1306,6 +1306,7 @@ is restored."));
 
 		/* compute # of messages and number of new messages waiting */
 		stage = STAGE_GETRANGE;
+		unsigned long long bytes;
 		err = (ctl->server.base_protocol->getrange)(mailserver_socket, ctl, idp->id, &count, &newm, &bytes);
 		if (err != 0)
 		    goto cleanUp;
@@ -1335,10 +1336,10 @@ is restored."));
 							  "%d messages for %s",
 							  count), 
 				  count, buf);
-			if (bytes == -1)
+			if (bytes == (unsigned long long)-1) // mailbox size unsupported
 			    report_complete(stdout, ".\n");
 			else
-			    report_complete(stdout, GT_(" (%d octets).\n"), bytes);
+			    report_complete(stdout, GT_(" (%llu octets).\n"), bytes);
 		    }
 		    else
 		    {
diff --git a/etrn.c b/etrn.c
index f3fab0ce..12b9d3fd 100644
--- a/etrn.c
+++ b/etrn.c
@@ -31,7 +31,7 @@ static int etrn_ok (int sock, char *argbuf)
 }
 
 static int etrn_getrange(int sock, struct query *ctl, const char *id, 
-			 int *countp, int *newp, int *bytes)
+			 int *countp, int *newp, unsigned long long *bytes)
 /* send ETRN and interpret the response */
 {
     int ok, opts;
diff --git a/fetchmail.h b/fetchmail.h
index 23ba6e6e..72259e10 100644
--- a/fetchmail.h
+++ b/fetchmail.h
@@ -210,7 +210,7 @@ struct method		/* describe methods for protocol state machine */
 				/* response_parsing function */
     int (*getauth)(int, struct query *, char *);
 				/* authorization fetcher */
-    int (*getrange)(int, struct query *, const char *, int *, int *, int *);
+    int (*getrange)(int, struct query *, const char *, int *, int *, unsigned long long *);
 				/* get message range to fetch */
     int (*getsizes)(int, int, int *);
 				/* get sizes of messages */
diff --git a/imap.c b/imap.c
index 7b80679a..7836acd7 100644
--- a/imap.c
+++ b/imap.c
@@ -883,7 +883,7 @@ static int imap_search(int sock, struct query *ctl, int count)
 static int imap_getrange(int sock, 
 			 struct query *ctl, 
 			 const char *folder, 
-			 int *countp, int *newp, int *bytes)
+			 int *countp, int *newp, unsigned long long *bytes)
 /* get range of messages to be fetched */
 {
     int ok;
diff --git a/odmr.c b/odmr.c
index 85decb6d..d1c011c4 100644
--- a/odmr.c
+++ b/odmr.c
@@ -36,7 +36,7 @@ static int odmr_ok (int sock, char *argbuf)
 }
 
 static int odmr_getrange(int sock, struct query *ctl, const char *id, 
-			 int *countp, int *newp, int *bytes)
+			 int *countp, int *newp, unsigned long long *bytes)
 /* send ODMR and then run a reverse SMTP session */
 {
     int ok, opts, smtp_sock;
diff --git a/pop2.c b/pop2.c
index 7c843616..5a5a1bd1 100644
--- a/pop2.c
+++ b/pop2.c
@@ -80,7 +80,7 @@ static int pop2_getauth(int sock, struct query *ctl, char *buf)
 }
 
 static int pop2_getrange(int sock, struct query *ctl, const char *folder, 
-			 int *countp, int *newp, int *bytes)
+			 int *countp, int *newp, unsigned long long *bytes)
 /* get range of messages to be fetched */
 {
     (void)ctl;
diff --git a/pop3.c b/pop3.c
index 6efe1b7e..25efbaad 100644
--- a/pop3.c
+++ b/pop3.c
@@ -969,7 +969,7 @@ static int pop3_slowuidl( int sock,  struct query *ctl, int *countp, int *newp)
 static int pop3_getrange(int sock, 
 			 struct query *ctl,
 			 const char *folder,
-			 int *countp, int *newp, int *bytes)
+			 int *countp, int *newp, unsigned long long *bytes)
 /* get range of messages to be fetched */
 {
     int ok;
@@ -992,7 +992,7 @@ static int pop3_getrange(int sock,
     if (ok == 0) {
 	int asgn;
 
-	asgn = sscanf(buf,"%d %d", countp, bytes);
+	asgn = sscanf(buf,"%d %llu", countp, bytes);
 	if (asgn != 2)
 		return PS_PROTOCOL;
     } else
-- 
2.22.0