[geary: 1/2] Make g_mime_filter_filter implementations more robust (closes #725)



commit dd053ebfbe93bd874332f88fed350bc5058b9a57
Author: Daniel Kahn Gillmor <dkg fifthhorseman net>
Date:   Mon Mar 16 08:00:50 2020 -0400

    Make g_mime_filter_filter implementations more robust (closes #725)
    
    By default, vala appears to translate an "out uint8[]" argument's size
    as a gint*.  but the g_mime_filter_filter implementation expects a
    gsize*.  This Just Works accidentally on most architectures, but fails
    on big-endian 64-bit architectures where sizeof(int) == 4, like s390x.
    
    See #725
    
    Signed-off-by: Daniel Kahn Gillmor <dkg fifthhorseman net>

 src/engine/rfc822/rfc822-gmime-filter-blockquotes.vala | 6 +++---
 src/engine/rfc822/rfc822-gmime-filter-flowed.vala      | 4 ++--
 src/engine/rfc822/rfc822-gmime-filter-plain.vala       | 4 ++--
 3 files changed, 7 insertions(+), 7 deletions(-)
---
diff --git a/src/engine/rfc822/rfc822-gmime-filter-blockquotes.vala 
b/src/engine/rfc822/rfc822-gmime-filter-blockquotes.vala
index 6f8c118f..8cf7563d 100644
--- a/src/engine/rfc822/rfc822-gmime-filter-blockquotes.vala
+++ b/src/engine/rfc822/rfc822-gmime-filter-blockquotes.vala
@@ -49,7 +49,7 @@ private class Geary.RFC822.FilterBlockquotes : GMime.Filter {
         return new_filter;
     }
 
-    private void do_filter(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
+    private void do_filter([CCode (array_length_type = "gsize")] uint8[] inbuf, size_t prespace, [CCode 
(array_length_type = "gsize")] out unowned uint8[] processed_buffer,
         out size_t outprespace, bool flush) {
 
         // This may not be strictly necessary.
@@ -122,12 +122,12 @@ private class Geary.RFC822.FilterBlockquotes : GMime.Filter {
         outprespace = this.outpre;
     }
 
-    public override void filter(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
+    public override void filter([CCode (array_length_type = "gsize")] uint8[] inbuf, size_t prespace, [CCode 
(array_length_type = "gsize")] out unowned uint8[] processed_buffer,
         out size_t outprespace) {
         do_filter(inbuf, prespace, out processed_buffer, out outprespace, false);
     }
 
-    public override void complete(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
+    public override void complete([CCode (array_length_type = "gsize")] uint8[] inbuf, size_t prespace, 
[CCode (array_length_type = "gsize")] out unowned uint8[] processed_buffer,
         out size_t outprespace) {
         do_filter(inbuf, prespace, out processed_buffer, out outprespace, true);
     }
diff --git a/src/engine/rfc822/rfc822-gmime-filter-flowed.vala 
b/src/engine/rfc822/rfc822-gmime-filter-flowed.vala
index d018c537..ffa19009 100644
--- a/src/engine/rfc822/rfc822-gmime-filter-flowed.vala
+++ b/src/engine/rfc822/rfc822-gmime-filter-flowed.vala
@@ -57,7 +57,7 @@ private class Geary.RFC822.FilterFlowed : GMime.Filter {
         return new_filter;
     }
 
-    public override void filter(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
+    public override void filter([CCode (array_length_type = "gsize")] uint8[] inbuf, size_t prespace, [CCode 
(array_length_type = "gsize")] out unowned uint8[] processed_buffer,
         out size_t outprespace) {
 
         // Worst-case scenario: We are about to leave the prefix,
@@ -147,7 +147,7 @@ private class Geary.RFC822.FilterFlowed : GMime.Filter {
         outprespace = this.outpre;
     }
 
-    public override void complete(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
+    public override void complete([CCode (array_length_type = "gsize")] uint8[] inbuf, size_t prespace, 
[CCode (array_length_type = "gsize")] out unowned uint8[] processed_buffer,
         out size_t outprespace) {
         filter(inbuf, prespace, out processed_buffer, out outprespace);
     }
diff --git a/src/engine/rfc822/rfc822-gmime-filter-plain.vala 
b/src/engine/rfc822/rfc822-gmime-filter-plain.vala
index b38baac0..36c970df 100644
--- a/src/engine/rfc822/rfc822-gmime-filter-plain.vala
+++ b/src/engine/rfc822/rfc822-gmime-filter-plain.vala
@@ -26,7 +26,7 @@ private class Geary.RFC822.FilterPlain : GMime.Filter {
         return new_filter;
     }
 
-    public override void filter(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
+    public override void filter([CCode (array_length_type = "gsize")] uint8[] inbuf, size_t prespace, [CCode 
(array_length_type = "gsize")] out unowned uint8[] processed_buffer,
         out size_t outprespace) {
 
         // This may not be strictly necessary.
@@ -56,7 +56,7 @@ private class Geary.RFC822.FilterPlain : GMime.Filter {
         outprespace = this.outpre;
     }
 
-    public override void complete(uint8[] inbuf, size_t prespace, out unowned uint8[] processed_buffer,
+    public override void complete([CCode (array_length_type = "gsize")] uint8[] inbuf, size_t prespace, 
[CCode (array_length_type = "gsize")] out unowned uint8[] processed_buffer,
         out size_t outprespace) {
         filter(inbuf, prespace, out processed_buffer, out outprespace);
     }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]