~ubuntu-branches/ubuntu/precise/topal/precise

« back to all changes in this revision

Viewing changes to alpine-1.10.patch

  • Committer: Bazaar Package Importer
  • Author(s): Phil Brooke
  • Date: 2008-07-18 07:57:38 UTC
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20080718075738-i1szqvmxz0evz32p
Tags: upstream-62
ImportĀ upstreamĀ versionĀ 62

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
diff -cr alpine.orig/alpine-1.10/alpine/send.c alpine.new/alpine-1.10/alpine/send.c
 
2
*** alpine.orig/alpine-1.10/alpine/send.c       2008-02-08 17:43:23.000000000 +0000
 
3
--- alpine.new/alpine-1.10/alpine/send.c        2008-06-19 09:24:42.000000000 +0100
 
4
***************
 
5
*** 4039,4044 ****
 
6
--- 4039,4061 ----
 
7
      pbf = save_previous_pbuf;
 
8
      g_rolenick = NULL;
 
9
  
 
10
+     /* Topal: Unmangle the body types. */
 
11
+     if ((*body)->type == TYPEMULTIPART 
 
12
+       && (*body)->topal_hack == 1) {
 
13
+       /* This was a single part message which Topal mangled. */
 
14
+       dprint((9, "Topal: unmangling single part message\n"));
 
15
+       (*body)->type = TYPETEXT;
 
16
+     }
 
17
+     if ((*body)->type == TYPEMULTIPART
 
18
+       && (*body)->topal_hack != 1
 
19
+       && (*body)->nested.part->body.type == TYPEMULTIPART
 
20
+       && (*body)->nested.part->body.topal_hack == 1) {
 
21
+       /* Topal mangled a multipart message.  So the first nested part
 
22
+        is really TYPETEXT. */
 
23
+       dprint((9, "Topal: unmangling first part of multipart message\n"));
 
24
+       (*body)->nested.part->body.type = TYPETEXT;
 
25
+     }
 
26
 
27
      dprint((4, "=== send returning ===\n"));
 
28
  }
 
29
  
 
30
***************
 
31
*** 5302,5323 ****
 
32
  
 
33
                                rfc822_parse_content_header(nb,
 
34
                                    (char *) ucase((unsigned char *) buf+8),s);
 
35
                                if(nb->type == TYPETEXT
 
36
                                   && nb->subtype
 
37
                                   && (!b->subtype 
 
38
                                       || strucmp(b->subtype, nb->subtype))){
 
39
!                                   if(b->subtype)
 
40
!                                     fs_give((void **) &b->subtype);
 
41
 
42
                                    b->subtype  = nb->subtype;
 
43
                                    nb->subtype = NULL;
 
44
!                                     
 
45
                                    mail_free_body_parameter(&b->parameter);
 
46
                                    b->parameter = nb->parameter;
 
47
                                    nb->parameter = NULL;
 
48
                                    mail_free_body_parameter(&nb->parameter);
 
49
                                }
 
50
 
51
                                mail_free_body(&nb);
 
52
                            }
 
53
  
 
54
--- 5319,5368 ----
 
55
  
 
56
                                rfc822_parse_content_header(nb,
 
57
                                    (char *) ucase((unsigned char *) buf+8),s);
 
58
+                               /* Topal: We're working on the first
 
59
+                                  text segment of the message.  If
 
60
+                                  the filter returns something that
 
61
+                                  isn't TYPETEXT, then we need to
 
62
+                                  pretend (later on) that this is in
 
63
+                                  fact a TYPETEXT, because Topal has
 
64
+                                  already encoded it....
 
65
 
66
+                                  Original code path first, then an
 
67
+                                  alternate path.
 
68
+                               */
 
69
                                if(nb->type == TYPETEXT
 
70
                                   && nb->subtype
 
71
                                   && (!b->subtype 
 
72
                                       || strucmp(b->subtype, nb->subtype))){
 
73
!                                 if(b->subtype)
 
74
!                                   fs_give((void **) &b->subtype);
 
75
!                                 
 
76
!                                 b->subtype  = nb->subtype;
 
77
!                                 nb->subtype = NULL;
 
78
!                                 
 
79
!                                 mail_free_body_parameter(&b->parameter);
 
80
!                                 b->parameter = nb->parameter;
 
81
!                                 nb->parameter = NULL;
 
82
!                                 mail_free_body_parameter(&nb->parameter);
 
83
!                               } 
 
84
!                               else if(F_ON(F_ENABLE_TOPAL_HACK, ps_global)){
 
85
!                                 /* Perhaps the type isn't TYPETEXT,
 
86
!                                    and the hack is requested.  So,
 
87
!                                    let's mess with the types. */
 
88
!                                 if(nb->type != TYPETEXT){
 
89
!                                   b->type     = nb->type;
 
90
                                    b->subtype  = nb->subtype;
 
91
                                    nb->subtype = NULL;
 
92
!                                   
 
93
!                                   dprint((9, "Topal: mangling body!\n"));
 
94
                                    mail_free_body_parameter(&b->parameter);
 
95
                                    b->parameter = nb->parameter;
 
96
                                    nb->parameter = NULL;
 
97
                                    mail_free_body_parameter(&nb->parameter);
 
98
+                                   b->topal_hack = 1;
 
99
+                                 }
 
100
                                }
 
101
!                               /* Topal: end */
 
102
                                mail_free_body(&nb);
 
103
                            }
 
104
  
 
105
Only in alpine.new/alpine-1.10/alpine: send.c.orig
 
106
diff -cr alpine.orig/alpine-1.10/imap/src/c-client/mail.h alpine.new/alpine-1.10/imap/src/c-client/mail.h
 
107
*** alpine.orig/alpine-1.10/imap/src/c-client/mail.h    2008-02-15 19:04:45.000000000 +0000
 
108
--- alpine.new/alpine-1.10/imap/src/c-client/mail.h     2008-06-19 09:24:42.000000000 +0100
 
109
***************
 
110
*** 775,780 ****
 
111
--- 775,781 ----
 
112
      unsigned long bytes;      /* size of text in octets */
 
113
    } size;
 
114
    char *md5;                  /* MD5 checksum */
 
115
+   unsigned short topal_hack;    /* set to 1 if topal has wrecked the sending */
 
116
    void *sparep;                       /* spare pointer reserved for main program */
 
117
  };
 
118
  
 
119
diff -cr alpine.orig/alpine-1.10/pith/conf.c alpine.new/alpine-1.10/pith/conf.c
 
120
*** alpine.orig/alpine-1.10/pith/conf.c 2008-03-14 18:15:38.000000000 +0000
 
121
--- alpine.new/alpine-1.10/pith/conf.c  2008-06-19 09:26:41.000000000 +0100
 
122
***************
 
123
*** 2739,2744 ****
 
124
--- 2739,2746 ----
 
125
         F_SEND_WO_CONFIRM, h_config_send_wo_confirm, PREF_SEND, 0},
 
126
        {"strip-whitespace-before-send", "Strip Whitespace Before Sending",
 
127
         F_STRIP_WS_BEFORE_SEND, h_config_strip_ws_before_send, PREF_SEND, 0},
 
128
+       {"enable-topal-hack", "Enable Topal hack for OpenPGP/MIME messages",
 
129
+        F_ENABLE_TOPAL_HACK, h_config_enable_topal_hack, PREF_HIDDEN, 0},
 
130
        {"warn-if-blank-fcc", "Warn if Blank Fcc",
 
131
         F_WARN_ABOUT_NO_FCC, h_config_warn_if_fcc_blank, PREF_SEND, 0},
 
132
        {"warn-if-blank-subject", "Warn if Blank Subject",
 
133
Only in alpine.new/alpine-1.10/pith: conf.c.orig
 
134
diff -cr alpine.orig/alpine-1.10/pith/conftype.h alpine.new/alpine-1.10/pith/conftype.h
 
135
*** alpine.orig/alpine-1.10/pith/conftype.h     2008-03-14 18:15:38.000000000 +0000
 
136
--- alpine.new/alpine-1.10/pith/conftype.h      2008-06-19 09:24:42.000000000 +0100
 
137
***************
 
138
*** 492,497 ****
 
139
--- 492,498 ----
 
140
        F_MARK_FCC_SEEN,
 
141
        F_MULNEWSRC_HOSTNAMES_AS_TYPED,
 
142
        F_STRIP_WS_BEFORE_SEND,
 
143
+       F_ENABLE_TOPAL_HACK,
 
144
        F_QUELL_FLOWED_TEXT,
 
145
        F_COMPOSE_ALWAYS_DOWNGRADE,
 
146
        F_SORT_DEFAULT_FCC_ALPHA,
 
147
Only in alpine.new/alpine-1.10/pith: conftype.h.orig
 
148
diff -cr alpine.orig/alpine-1.10/pith/pine.hlp alpine.new/alpine-1.10/pith/pine.hlp
 
149
*** alpine.orig/alpine-1.10/pith/pine.hlp       2008-03-14 18:34:08.000000000 +0000
 
150
--- alpine.new/alpine-1.10/pith/pine.hlp        2008-06-19 09:24:42.000000000 +0100
 
151
***************
 
152
*** 3133,3138 ****
 
153
--- 3133,3139 ----
 
154
  <li><a href="h_config_strip_sigdashes">FEATURE: <!--#echo var="FEAT_strip-from-sigdashes-on-reply"--></a>
 
155
  <li><a href="h_config_forward_as_attachment">FEATURE: <!--#echo var="FEAT_forward-as-attachment"--></a>
 
156
  <li><a href="h_config_strip_ws_before_send">FEATURE: <!--#echo var="FEAT_strip-whitespace-before-send"--></a>
 
157
+ <li><a href="h_config_enable_topal_hack">FEATURE: <!--#echo var="FEAT_enable-topal-hack"--></a>
 
158
  <li><a href="h_config_quell_attach_ext_warn">FEATURE: <!--#echo var="FEAT_quell-attachment-extension-warn"--></a>
 
159
  <li><a href="h_config_quell_attach_extra_prompt">FEATURE: <!--#echo var="FEAT_quell-attachment-extra-prompt"--></a>
 
160
  <li><a href="h_config_no_bezerk_zone">FEATURE: <!--#echo var="FEAT_quell-berkeley-format-timezone"--></a>
 
161
***************
 
162
*** 28175,28180 ****
 
163
--- 28176,28196 ----
 
164
  &lt;End of help on this topic&gt;
 
165
  </BODY>
 
166
  </HTML>
 
167
+ ====== h_config_enable_topal_hack =====
 
168
+ <HTML>
 
169
+ <HEAD>
 
170
+ <TITLE>FEATURE: <!--#echo var="FEAT_enable-topal-hack"--></TITLE>
 
171
+ </HEAD>
 
172
+ <BODY>
 
173
+ <H1>FEATURE: <!--#echo var="FEAT_enable-topal-hack"--></H1>
 
174
+ <P>
 
175
+ This feature allows Topal (and other sending-filters) to change the
 
176
+ MIME type of the email.  This is potentially dangerous because it
 
177
+ pretends that multipart emails are plain emails.
 
178
+ <P>
 
179
+ &lt;End of help on this topic&gt;
 
180
+ </BODY>
 
181
+ </HTML>
 
182
  ====== h_config_del_from_dot =====
 
183
  <HTML>
 
184
  <HEAD>
 
185
Only in alpine.new/alpine-1.10/pith: pine.hlp.orig
 
186
diff -cr alpine.orig/alpine-1.10/pith/send.c alpine.new/alpine-1.10/pith/send.c
 
187
*** alpine.orig/alpine-1.10/pith/send.c 2008-02-15 02:11:48.000000000 +0000
 
188
--- alpine.new/alpine-1.10/pith/send.c  2008-06-19 09:24:42.000000000 +0100
 
189
***************
 
190
*** 108,114 ****
 
191
  long       pine_rfc822_output_body(BODY *,soutr_t,TCPSTREAM *);
 
192
  int      pine_write_body_header(BODY *, soutr_t, TCPSTREAM *);
 
193
  int      pine_write_header_line(char *, char *, STORE_S *);
 
194
! int      pine_write_params(PARAMETER *, STORE_S *);
 
195
  char      *tidy_smtp_mess(char *, char *, char *, size_t);
 
196
  int      lmc_body_header_line(char *, int);
 
197
  int      lmc_body_header_finish(void);
 
198
--- 108,114 ----
 
199
  long       pine_rfc822_output_body(BODY *,soutr_t,TCPSTREAM *);
 
200
  int      pine_write_body_header(BODY *, soutr_t, TCPSTREAM *);
 
201
  int      pine_write_header_line(char *, char *, STORE_S *);
 
202
! int      pine_write_params(PARAMETER *, STORE_S *, BODY *);
 
203
  char      *tidy_smtp_mess(char *, char *, char *, size_t);
 
204
  int      lmc_body_header_line(char *, int);
 
205
  int      lmc_body_header_finish(void);
 
206
***************
 
207
*** 1750,1756 ****
 
208
--- 1750,1758 ----
 
209
      /* set up counts and such to keep track sent percentage */
 
210
      send_bytes_sent = 0;
 
211
      gf_filter_init();                         /* zero piped byte count, 'n */
 
212
+     dprint((1, "Topal: HERE 1!\n"));
 
213
      send_bytes_to_send = send_body_size(body);        /* count body bytes          */
 
214
+     dprint((1, "Topal: HERE 2!\n"));
 
215
      ps_global->c_client_error[0] = error_buf[0] = '\0';
 
216
      we_cancel = busy_cue(_("Sending mail"),
 
217
                         send_bytes_to_send ? sent_percent : NULL, 0);
 
218
***************
 
219
*** 1767,1772 ****
 
220
--- 1769,1777 ----
 
221
  
 
222
  #endif
 
223
  
 
224
+     dprint((1, "Topal: HERE 3!\n"));
 
225
 
226
 
227
      /*
 
228
       * If the user's asked for it, and we find that the first text
 
229
       * part (attachments all get b64'd) is non-7bit, ask for 8BITMIME.
 
230
***************
 
231
*** 1774,1779 ****
 
232
--- 1779,1785 ----
 
233
      if(F_ON(F_ENABLE_8BIT, ps_global) && (bp = first_text_8bit(body)))
 
234
         smtp_opts |= SOP_8BITMIME;
 
235
  
 
236
+     dprint((1, "Topal: HERE 3.1!\n"));
 
237
  #ifdef        DEBUG
 
238
  #ifndef DEBUGJOURNAL
 
239
      if(debug > 5 || (flags & CM_VERBOSE))
 
240
***************
 
241
*** 1837,1853 ****
 
242
--- 1843,1863 ----
 
243
          }
 
244
      }
 
245
  
 
246
+     dprint((1, "Topal: HERE 4!\n"));
 
247
 
248
      /*
 
249
       * Install our rfc822 output routine 
 
250
       */
 
251
      sending_hooks.rfc822_out = mail_parameters(NULL, GET_RFC822OUTPUT, NULL);
 
252
      (void)mail_parameters(NULL, SET_RFC822OUTPUT, (void *)post_rfc822_output);
 
253
+     dprint((1, "Topal: HERE 5!\n"));
 
254
  
 
255
      /*
 
256
       * Allow for verbose posting
 
257
       */
 
258
      (void) mail_parameters(NULL, SET_SMTPVERBOSE,
 
259
                           (void *) pine_smtp_verbose_out);
 
260
+     dprint((1, "Topal: HERE 6!\n"));
 
261
  
 
262
      /*
 
263
       * We do this because we want mm_log to put the error message into
 
264
***************
 
265
*** 1891,1896 ****
 
266
--- 1901,1907 ----
 
267
  
 
268
      ps_global->noshow_error = 0;
 
269
  
 
270
+     dprint((1, "Topal: HERE 7!\n"));
 
271
      TIME_STAMP("smtp open", 1);
 
272
      if(sending_stream){
 
273
        unsigned short save_encoding, added_encoding;
 
274
***************
 
275
*** 2453,2461 ****
 
276
  BODY *
 
277
  first_text_8bit(struct mail_bodystruct *body)
 
278
  {
 
279
!     if(body->type == TYPEMULTIPART)   /* advance to first contained part */
 
280
        body = &body->nested.part->body;
 
281
  
 
282
      return((body->type == TYPETEXT && body->encoding != ENC7BIT)
 
283
             ? body : NULL);
 
284
  }
 
285
--- 2464,2475 ----
 
286
  BODY *
 
287
  first_text_8bit(struct mail_bodystruct *body)
 
288
  {
 
289
!   /* Be careful of Topal changes... */
 
290
!     if(body->type == TYPEMULTIPART
 
291
!        && body->topal_hack != 1)      /* advance to first contained part */
 
292
        body = &body->nested.part->body;
 
293
  
 
294
+     /* Topal: this bit might not be correct, now. */
 
295
      return((body->type == TYPETEXT && body->encoding != ENC7BIT)
 
296
             ? body : NULL);
 
297
  }
 
298
***************
 
299
*** 2826,2844 ****
 
300
    dprint((4, "-- pine_encode_body: %d\n", body ? body->type : 0));
 
301
    if (body) switch (body->type) {
 
302
      case TYPEMULTIPART:               /* multi-part */
 
303
!       if (!body->parameter) { /* cookie not set up yet? */
 
304
          char tmp[MAILTMPLEN]; /* make cookie not in BASE64 or QUOTEPRINT*/
 
305
 
306
          snprintf (tmp,sizeof(tmp),"%ld-%ld-%ld=:%ld",gethostid (),random (),(long) time (0),
 
307
                    (long) getpid ());
 
308
          tmp[sizeof(tmp)-1] = '\0';
 
309
          set_parameter(&body->parameter, "BOUNDARY", tmp);
 
310
        }
 
311
-       part = body->nested.part;       /* encode body parts */
 
312
-       do pine_encode_body (&part->body);
 
313
-       while ((part = part->next) != NULL);    /* until done */
 
314
        break;
 
315
 
316
      case TYPETEXT :
 
317
        /*
 
318
         * If the part is text we edited, then it is UTF-8.
 
319
--- 2840,2860 ----
 
320
    dprint((4, "-- pine_encode_body: %d\n", body ? body->type : 0));
 
321
    if (body) switch (body->type) {
 
322
      case TYPEMULTIPART:               /* multi-part */
 
323
!       if (body->topal_hack != 1) { /* But only if Topal hasn't touched it! */
 
324
!       if (!body->parameter) { /* cookie not set up yet? */
 
325
          char tmp[MAILTMPLEN]; /* make cookie not in BASE64 or QUOTEPRINT*/
 
326
!         
 
327
          snprintf (tmp,sizeof(tmp),"%ld-%ld-%ld=:%ld",gethostid (),random (),(long) time (0),
 
328
                    (long) getpid ());
 
329
          tmp[sizeof(tmp)-1] = '\0';
 
330
          set_parameter(&body->parameter, "BOUNDARY", tmp);
 
331
+       }
 
332
+       part = body->nested.part;       /* encode body parts */
 
333
+       do pine_encode_body (&part->body);
 
334
+       while ((part = part->next) != NULL);    /* until done */
 
335
        }
 
336
        break;
 
337
!       
 
338
      case TYPETEXT :
 
339
        /*
 
340
         * If the part is text we edited, then it is UTF-8.
 
341
***************
 
342
*** 4195,4201 ****
 
343
  
 
344
      dprint((4, "-- pine_rfc822_output_body: %d\n",
 
345
               body ? body->type : 0));
 
346
!     if(body->type == TYPEMULTIPART) {   /* multipart gets special handling */
 
347
        part = body->nested.part;       /* first body part */
 
348
                                        /* find cookie */
 
349
        for (param = body->parameter; param && !cookie; param = param->next)
 
350
--- 4211,4219 ----
 
351
  
 
352
      dprint((4, "-- pine_rfc822_output_body: %d\n",
 
353
               body ? body->type : 0));
 
354
!     if(body->type == TYPEMULTIPART
 
355
!        && body->topal_hack != 1) {   /* multipart gets special handling, 
 
356
!                                       unless Topal messed with it */
 
357
        part = body->nested.part;       /* first body part */
 
358
                                        /* find cookie */
 
359
        for (param = body->parameter; param && !cookie; param = param->next)
 
360
***************
 
361
*** 4285,4294 ****
 
362
         * BEFORE applying any encoding (rfc1341: appendix G)...
 
363
         * NOTE: almost all filters expect CRLF newlines 
 
364
         */
 
365
!       if(body->type == TYPETEXT
 
366
!          && body->encoding != ENCBASE64
 
367
           && !so_attr((STORE_S *) body->contents.text.data, "rawbody", NULL)){
 
368
!           gf_link_filter(gf_local_nvtnl, NULL);
 
369
        }
 
370
  
 
371
        switch (body->encoding) {       /* all else needs filtering */
 
372
--- 4303,4316 ----
 
373
         * BEFORE applying any encoding (rfc1341: appendix G)...
 
374
         * NOTE: almost all filters expect CRLF newlines 
 
375
         */
 
376
!       if(((body->type == TYPETEXT
 
377
!            && body->encoding != ENCBASE64)
 
378
!           /* Or if Topal mucked with it... */
 
379
!           | (body->type == TYPEMULTIPART && body->topal_hack == 1))
 
380
           && !so_attr((STORE_S *) body->contents.text.data, "rawbody", NULL)){
 
381
!         if(body->topal_hack == 1) 
 
382
!           dprint((9, "Topal: Canonical conversion, although Topal has mangled...\n"));
 
383
!         gf_link_filter(gf_local_nvtnl, NULL);
 
384
        }
 
385
  
 
386
        switch (body->encoding) {       /* all else needs filtering */
 
387
***************
 
388
*** 4390,4396 ****
 
389
          return(pwbh_finish(0, so));
 
390
            
 
391
        if(body->parameter){
 
392
!           if(!pine_write_params(body->parameter, so))
 
393
              return(pwbh_finish(0, so));
 
394
        }
 
395
        else if(!so_puts(so, "; CHARSET=US-ASCII"))
 
396
--- 4412,4418 ----
 
397
          return(pwbh_finish(0, so));
 
398
            
 
399
        if(body->parameter){
 
400
!           if(!pine_write_params(body->parameter, so, body))
 
401
              return(pwbh_finish(0, so));
 
402
        }
 
403
        else if(!so_puts(so, "; CHARSET=US-ASCII"))
 
404
***************
 
405
*** 4469,4475 ****
 
406
                 && so_puts(so, body->disposition.type)))
 
407
              return(pwbh_finish(0, so));
 
408
  
 
409
!           if(!pine_write_params(body->disposition.parameter, so))
 
410
              return(pwbh_finish(0, so));             
 
411
  
 
412
            if(!so_puts(so, "\015\012"))
 
413
--- 4491,4497 ----
 
414
                 && so_puts(so, body->disposition.type)))
 
415
              return(pwbh_finish(0, so));
 
416
  
 
417
!           if(!pine_write_params(body->disposition.parameter, so, body))
 
418
              return(pwbh_finish(0, so));             
 
419
  
 
420
            if(!so_puts(so, "\015\012"))
 
421
***************
 
422
*** 4531,4537 ****
 
423
   * pine_write_param - convert, encode and write MIME header-field parameters
 
424
   */
 
425
  int
 
426
! pine_write_params(PARAMETER *param, STORE_S *so)
 
427
  {           
 
428
      for(; param; param = param->next){
 
429
        int   rv;
 
430
--- 4553,4559 ----
 
431
   * pine_write_param - convert, encode and write MIME header-field parameters
 
432
   */
 
433
  int
 
434
! pine_write_params(PARAMETER *param, STORE_S *so, BODY *body)
 
435
  {           
 
436
      for(; param; param = param->next){
 
437
        int   rv;
 
438
***************
 
439
*** 4540,4548 ****
 
440
  
 
441
        cs = posting_characterset(param->value, NULL, HdrText);
 
442
        cv = utf8_to_charset(param->value, cs, 0);
 
443
!       rv = (so_puts(so, "; ")
 
444
!             && rfc2231_output(so, param->attribute, cv, (char *) tspecials, cs));
 
445
 
446
        if(cv && cv != param->value)
 
447
          fs_give((void **) &cv);
 
448
  
 
449
--- 4562,4578 ----
 
450
  
 
451
        cs = posting_characterset(param->value, NULL, HdrText);
 
452
        cv = utf8_to_charset(param->value, cs, 0);
 
453
!       if (body->topal_hack == 1
 
454
!           && !struncmp(param->attribute, "protocol", 9)) {
 
455
!         /* Did Topal introduce more parameters? */
 
456
!         dprint((9, "Topal: parameter encoding of protocol, with Topal hack\n"));
 
457
!         rv = (so_puts(so, "; \015\012\011")
 
458
!               && rfc2231_output(so, param->attribute, cv, (char *) tspecials, cs));
 
459
!       }
 
460
!       else
 
461
!         rv = (so_puts(so, "; ")
 
462
!               && rfc2231_output(so, param->attribute, cv, (char *) tspecials, cs));
 
463
!       
 
464
        if(cv && cv != param->value)
 
465
          fs_give((void **) &cv);
 
466
  
 
467
***************
 
468
*** 4649,4655 ****
 
469
      long  l = 0L;
 
470
      PART *part;
 
471
  
 
472
!     if(body->type == TYPEMULTIPART) {   /* multipart gets special handling */
 
473
        part = body->nested.part;       /* first body part */
 
474
        do                              /* for each part */
 
475
          l += send_body_size(&part->body);
 
476
--- 4679,4687 ----
 
477
      long  l = 0L;
 
478
      PART *part;
 
479
  
 
480
!     if(body->type == TYPEMULTIPART 
 
481
!        && body->topal_hack != 1) {   /* multipart gets special handling 
 
482
!                                       but again, be careful of Topal */
 
483
        part = body->nested.part;       /* first body part */
 
484
        do                              /* for each part */
 
485
          l += send_body_size(&part->body);
 
486
Only in alpine.new/alpine-1.10/pith: send.c.orig
 
487
Only in alpine.new/alpine-1.10/web/src/alpined.d: compilation.orig