[geary/wip/737642-uint: 2/2] Further work checking received numbers



commit 19e786d34a82b65e94c5e94afefd91d61f209d10
Author: Jim Nelson <jim yorba org>
Date:   Wed Nov 12 13:17:34 2014 -0800

    Further work checking received numbers
    
    Range and format are now more thoroughly checked throughout the stack.

 src/engine/api/geary-email-properties.vala         |    4 +-
 src/engine/api/geary-email.vala                    |   12 ++-----
 src/engine/common/common-message-data.vala         |   26 ----------------
 src/engine/imap-db/imap-db-folder.vala             |   10 +++---
 src/engine/imap-db/imap-db-message-row.vala        |    4 +-
 .../imap-engine-abstract-list-email.vala           |    2 +-
 src/engine/imap/api/imap-folder.vala               |   11 +++++--
 src/engine/imap/message/imap-message-data.vala     |    2 +-
 src/engine/imap/message/imap-sequence-number.vala  |   29 ++++++++++-------
 src/engine/imap/message/imap-uid-validity.vala     |   32 ++++++++++++++++++++
 src/engine/imap/message/imap-uid.vala              |   25 +++++++++++++++
 .../imap/parameter/imap-number-parameter.vala      |   19 +++++++----
 .../imap/parameter/imap-string-parameter.vala      |   20 ++++++++----
 .../imap/response/imap-fetch-data-decoder.vala     |    4 +-
 src/engine/imap/response/imap-fetched-data.vala    |    3 +-
 src/engine/imap/response/imap-response-code.vala   |    4 +-
 src/engine/imap/response/imap-server-data.vala     |    2 +-
 src/engine/imap/response/imap-status-data.vala     |    4 +-
 src/engine/rfc822/rfc822-message-data.vala         |    4 +-
 19 files changed, 132 insertions(+), 85 deletions(-)
---
diff --git a/src/engine/api/geary-email-properties.vala b/src/engine/api/geary-email-properties.vala
index 41b5970..927d6f5 100644
--- a/src/engine/api/geary-email-properties.vala
+++ b/src/engine/api/geary-email-properties.vala
@@ -24,9 +24,9 @@ public abstract class Geary.EmailProperties : BaseObject {
     /**
      * Total size of the email (header and body) in bytes.
      */
-    public long total_bytes { get; protected set; }
+    public int64 total_bytes { get; protected set; }
     
-    public EmailProperties(DateTime date_received, long total_bytes) {
+    public EmailProperties(DateTime date_received, int64 total_bytes) {
         this.date_received = date_received;
         this.total_bytes = total_bytes;
     }
diff --git a/src/engine/api/geary-email.vala b/src/engine/api/geary-email.vala
index f7ffddc..5c9ef33 100644
--- a/src/engine/api/geary-email.vala
+++ b/src/engine/api/geary-email.vala
@@ -397,15 +397,9 @@ public class Geary.Email : BaseObject {
         if (aprop == null || bprop == null)
             return compare_id_ascending(aemail, bemail);
         
-        long asize = aprop.total_bytes;
-        long bsize = bprop.total_bytes;
-        
-        if (asize < bsize)
-            return -1;
-        else if (asize > bsize)
-            return 1;
-        else
-            return compare_id_ascending(aemail, bemail);
+        int cmp = (int) (aprop.total_bytes - bprop.total_bytes).clamp(-1, 1);
+
+        return (cmp != 0) ? cmp : compare_id_ascending(aemail, bemail);
     }
     
     /**
diff --git a/src/engine/common/common-message-data.vala b/src/engine/common/common-message-data.vala
index 59b39a2..65f420e 100644
--- a/src/engine/common/common-message-data.vala
+++ b/src/engine/common/common-message-data.vala
@@ -83,32 +83,6 @@ public abstract class Geary.MessageData.IntMessageData : AbstractMessageData,
     }
 }
 
-public abstract class Geary.MessageData.LongMessageData : AbstractMessageData,
-    Gee.Hashable<LongMessageData> {
-    public long value { get; private set; }
-    
-    private uint stored_hash = uint.MAX;
-    
-    public LongMessageData(long value) {
-        this.value = value;
-    }
-    
-    public virtual bool equal_to(LongMessageData other) {
-        if (this == other)
-            return true;
-        
-        return (value == other.value);
-    }
-    
-    public virtual uint hash() {
-        return (stored_hash != uint.MAX) ? stored_hash : (stored_hash = int64_hash((int64) value));
-    }
-    
-    public override string to_string() {
-        return value.to_string();
-    }
-}
-
 public abstract class Geary.MessageData.Int64MessageData : AbstractMessageData,
     Gee.Hashable<Int64MessageData> {
     public int64 value { get; private set; }
diff --git a/src/engine/imap-db/imap-db-folder.vala b/src/engine/imap-db/imap-db-folder.vala
index 1629e3a..b9a4bae 100644
--- a/src/engine/imap-db/imap-db-folder.vala
+++ b/src/engine/imap-db/imap-db-folder.vala
@@ -1180,7 +1180,7 @@ private class Geary.ImapDB.Folder : BaseObject, Geary.ReferenceSemantics {
         Imap.EmailProperties? imap_properties = (Imap.EmailProperties) email.properties;
         string? internaldate = (imap_properties != null && imap_properties.internaldate != null)
             ? imap_properties.internaldate.serialize() : null;
-        long rfc822_size = (imap_properties != null) ? imap_properties.rfc822_size.value : -1;
+        int64 rfc822_size = (imap_properties != null) ? imap_properties.rfc822_size.value : -1;
         
         if (String.is_empty(internaldate) || rfc822_size < 0) {
             debug("Unable to detect duplicates for %s (%s available but invalid)", email.id.to_string(),
@@ -1202,8 +1202,8 @@ private class Geary.ImapDB.Folder : BaseObject, Geary.ReferenceSemantics {
         
         int64 message_id = results.rowid_at(0);
         if (results.next(cancellable)) {
-            debug("Warning: multiple messages with the same internaldate (%s) and size (%lu) in %s",
-                internaldate, rfc822_size, to_string());
+            debug("Warning: multiple messages with the same internaldate (%s) and size (%s) in %s",
+                internaldate, rfc822_size.to_string(), to_string());
         }
         
         Db.Statement search_stmt = cx.prepare(
@@ -1323,7 +1323,7 @@ private class Geary.ImapDB.Folder : BaseObject, Geary.ReferenceSemantics {
         stmt.bind_string(16, row.email_flags);
         stmt.bind_string(17, row.internaldate);
         stmt.bind_int64(18, row.internaldate_time_t);
-        stmt.bind_long(19, row.rfc822_size);
+        stmt.bind_int64(19, row.rfc822_size);
         
         int64 message_id = stmt.exec_insert(cancellable);
         
@@ -1732,7 +1732,7 @@ private class Geary.ImapDB.Folder : BaseObject, Geary.ReferenceSemantics {
                 "UPDATE MessageTable SET internaldate=?, internaldate_time_t=?, rfc822_size=? WHERE id=?");
             stmt.bind_string(0, row.internaldate);
             stmt.bind_int64(1, row.internaldate_time_t);
-            stmt.bind_long(2, row.rfc822_size);
+            stmt.bind_int64(2, row.rfc822_size);
             stmt.bind_rowid(3, row.id);
             
             stmt.exec(cancellable);
diff --git a/src/engine/imap-db/imap-db-message-row.vala b/src/engine/imap-db/imap-db-message-row.vala
index 98c5c60..a2c4c9a 100644
--- a/src/engine/imap-db/imap-db-message-row.vala
+++ b/src/engine/imap-db/imap-db-message-row.vala
@@ -34,7 +34,7 @@ private class Geary.ImapDB.MessageRow {
     public string? email_flags { get; set; default = null; }
     public string? internaldate { get; set; default = null; }
     public time_t internaldate_time_t { get; set; default = -1; }
-    public long rfc822_size { get; set; default = -1; }
+    public int64 rfc822_size { get; set; default = -1; }
     
     public MessageRow() {
     }
@@ -93,7 +93,7 @@ private class Geary.ImapDB.MessageRow {
         if (fields.is_all_set(Geary.Email.Field.PROPERTIES)) {
             internaldate = results.string_for("internaldate");
             internaldate_time_t = (time_t) results.int64_for("internaldate_time_t");
-            rfc822_size = results.long_for("rfc822_size");
+            rfc822_size = results.int64_for("rfc822_size");
         }
     }
     
diff --git a/src/engine/imap-engine/replay-ops/imap-engine-abstract-list-email.vala 
b/src/engine/imap-engine/replay-ops/imap-engine-abstract-list-email.vala
index f391ff6..e9de104 100644
--- a/src/engine/imap-engine/replay-ops/imap-engine-abstract-list-email.vala
+++ b/src/engine/imap-engine/replay-ops/imap-engine-abstract-list-email.vala
@@ -219,7 +219,7 @@ private abstract class Geary.ImapEngine.AbstractListEmail : Geary.ImapEngine.Sen
         if (flags.is_oldest_to_newest()) {
             if (initial_uid == null) {
                 // if oldest to newest and initial-id is null, then start at the bottom
-                low_pos = new Imap.SequenceNumber(1);
+                low_pos = new Imap.SequenceNumber(Imap.SequenceNumber.MIN);
             } else {
                 Gee.Map<Imap.UID, Imap.SequenceNumber>? map = yield 
owner.remote_folder.uid_to_position_async(
                     new Imap.MessageSet.uid(initial_uid), cancellable);
diff --git a/src/engine/imap/api/imap-folder.vala b/src/engine/imap/api/imap-folder.vala
index 4441b82..82f316a 100644
--- a/src/engine/imap/api/imap-folder.vala
+++ b/src/engine/imap/api/imap-folder.vala
@@ -238,8 +238,13 @@ private class Geary.Imap.Folder : BaseObject {
     private void on_search(Gee.List<int64?> seq_or_uid) {
         // All SEARCH from this class are UID SEARCH, so can reliably convert and add to
         // accumulator
-        foreach (int64 uid in seq_or_uid)
-            search_accumulator.add(new UID(uid));
+        foreach (int64 uid in seq_or_uid) {
+            try {
+                search_accumulator.add(new UID.checked(uid));
+            } catch (ImapError imaperr) {
+                debug("%s Unable to process SEARCH UID result: %s", to_string(), imaperr.message);
+            }
+        }
     }
     
     private void on_status_response(StatusResponse status_response) {
@@ -1002,7 +1007,7 @@ private class Geary.Imap.Folder : BaseObject {
         StatusResponse response = responses.get(cmd);
         if (response.status == Status.OK && response.response_code != null &&
             response.response_code.get_response_code_type().is_value("appenduid")) {
-            UID new_id = new UID(response.response_code.get_as_string(2).as_int64());
+            UID new_id = new UID.checked(response.response_code.get_as_string(2).as_int64());
             
             return new ImapDB.EmailIdentifier.no_message_id(new_id);
         }
diff --git a/src/engine/imap/message/imap-message-data.vala b/src/engine/imap/message/imap-message-data.vala
index 7e18aaa..e0a5dd3 100644
--- a/src/engine/imap/message/imap-message-data.vala
+++ b/src/engine/imap/message/imap-message-data.vala
@@ -20,7 +20,7 @@ public interface Geary.Imap.MessageData : Geary.MessageData.AbstractMessageData
 }
 
 public class Geary.Imap.RFC822Size : Geary.RFC822.Size, Geary.Imap.MessageData {
-    public RFC822Size(long value) {
+    public RFC822Size(int64 value) {
         base (value);
     }
 }
diff --git a/src/engine/imap/message/imap-sequence-number.vala 
b/src/engine/imap/message/imap-sequence-number.vala
index 82cc392..f13de5b 100644
--- a/src/engine/imap/message/imap-sequence-number.vala
+++ b/src/engine/imap/message/imap-sequence-number.vala
@@ -29,36 +29,41 @@ public class Geary.Imap.SequenceNumber : Geary.MessageData.Int64MessageData, Gea
     /**
      * Create a new { link SequenceNumber}.
      *
-     * This does not check if the value is valid, i.e. >= { link MIN_VALUE}.
+     * This does not check if the value is valid.
+     *
+     * @see is_value_valid
+     * @see SequenceNumber.checked
      */
     public SequenceNumber(int64 value) {
         base (value);
     }
     
     /**
-     * Converts an array of ints into an array of { link SequenceNumber}s.
+     * Create a new { link SequenceNumber}, throwing { link ImapError.INVALID} if an invalid value
+     * is passed in.
+     *
+     * @see is_value_valid
+     * @see SequenceNumber
      */
-    public static SequenceNumber[] to_list(int[] value_array) {
-        SequenceNumber[] list = new SequenceNumber[0];
-        foreach (int value in value_array)
-            list += new SequenceNumber(value);
+    public SequenceNumber.checked(int64 value) throws ImapError {
+        if (!is_value_valid(value))
+            throw new ImapError.INVALID("Invalid sequence number %s", value.to_string());
         
-        return list;
+        base (value);
     }
     
     /**
      * Defined as { link value} >= { link MIN} and <= { link MAX}.
      */
-    public bool is_valid() {
+    public static bool is_value_valid(int64 value) {
         return value >= MIN && value <= MAX;
     }
     
     /**
-     * Returns a new { link SequenceNumber} that is one higher than this value.
-     *
+     * Defined as { link value} >= { link MIN} and <= { link MAX}.
      */
-    public SequenceNumber inc() {
-        return new SequenceNumber(value + 1);
+    public bool is_valid() {
+        return is_value_valid(value);
     }
     
     /**
diff --git a/src/engine/imap/message/imap-uid-validity.vala b/src/engine/imap/message/imap-uid-validity.vala
index f1ed27d..1068838 100644
--- a/src/engine/imap/message/imap-uid-validity.vala
+++ b/src/engine/imap/message/imap-uid-validity.vala
@@ -18,8 +18,40 @@ public class Geary.Imap.UIDValidity : Geary.MessageData.Int64MessageData, Geary.
     public static int64 MAX = uint32.MAX;
     public static int64 INVALID = -1;
     
+    /**
+     * Creates a new { link UIDValidity} without checking for valid values.
+     *
+     * @see UIDValidity.checked
+     */
     public UIDValidity(int64 value) {
         base (value);
     }
+    
+    /**
+     * Creates a new { link UIDValidity}, throwing { link ImapError.INVALID} if the supplied value
+     * is invalid.
+     *
+     * @see is_value_valid
+     */
+    public UIDValidity.checked(int64 value) throws ImapError {
+        if (!is_value_valid(value))
+            throw new ImapError.INVALID("Invalid UIDVALIDITY %s", value.to_string());
+        
+        base (value);
+    }
+    
+    /**
+     * @see is_value_valid
+     */
+    public bool is_valid() {
+        return is_value_valid(value);
+    }
+    
+    /**
+     * Returns true if the supplied value is between { link MIN} and { link MAX}, inclusive.
+     */
+    public static bool is_value_valid(int64 val) {
+        return Numeric.int64_in_range_inclusive(val, MIN, MAX);
+    }
 }
 
diff --git a/src/engine/imap/message/imap-uid.vala b/src/engine/imap/message/imap-uid.vala
index 0fc5199..e0a85dd 100644
--- a/src/engine/imap/message/imap-uid.vala
+++ b/src/engine/imap/message/imap-uid.vala
@@ -19,14 +19,39 @@ public class Geary.Imap.UID : Geary.MessageData.Int64MessageData, Geary.Imap.Mes
     public static int64 MAX = uint32.MAX;
     public static int64 INVALID = -1;
     
+    /**
+     * Creates a new { link UID} without checking for validity.
+     *
+     * @see UID.checked
+     * @see is_value_valid
+     */
     public UID(int64 value) {
         base (value);
     }
     
+    /**
+     * Creates a new { link UID}, throwing an { link ImapError.INVALID} if the supplied value is
+     * not a positive unsigned 32-bit integer.
+     *
+     * @see is_value_valid
+     */
+    public UID.checked(int64 value) throws ImapError {
+        if (!is_value_valid(value))
+            throw new ImapError.INVALID("Invalid UID %s", value.to_string());
+        
+        base (value);
+    }
+    
+    /**
+     * @see is_value_valid
+     */
     public bool is_valid() {
         return is_value_valid(value);
     }
     
+    /**
+     * Returns true if the supplied value is between { link MIN} and { link MAX}, inclusive.
+     */
     public static bool is_value_valid(int64 val) {
         return Numeric.int64_in_range_inclusive(val, MIN, MAX);
     }
diff --git a/src/engine/imap/parameter/imap-number-parameter.vala 
b/src/engine/imap/parameter/imap-number-parameter.vala
index f6c29f5..e32c3cc 100644
--- a/src/engine/imap/parameter/imap-number-parameter.vala
+++ b/src/engine/imap/parameter/imap-number-parameter.vala
@@ -53,37 +53,42 @@ public class Geary.Imap.NumberParameter : UnquotedStringParameter {
      * positive value.  is_negative returns set to true if that's the case.  is_negative is only
      * a valid value if the method returns true itself.
      *
+     * is_negative is false for zero ("0") and negative zero ("-0").
+     *
      * Empty strings (null or zero-length) are considered non-numeric.  Leading and trailing
      * whitespace are stripped before evaluating the string.
      */
-    public static bool is_numeric(string s, out bool is_negative) {
+    public static bool is_ascii_numeric(string ascii, out bool is_negative) {
         is_negative = false;
         
-        string str = s.strip();
+        string str = ascii.strip();
         
         if (String.is_empty(str))
             return false;
         
-        bool first_char = true;
+        bool has_nonzero = false;
         int index = 0;
         for (;;) {
             char ch = str[index++];
             if (ch == String.EOS)
                 break;
             
-            if (first_char && ch == '-') {
+            if (index == 1 && ch == '-') {
                 is_negative = true;
-                first_char = false;
                 
                 continue;
             }
             
-            first_char = false;
-            
             if (!ch.isdigit())
                 return false;
+            
+            if (ch != '0')
+                has_nonzero = true;
         }
         
+        if (is_negative && !has_nonzero)
+            is_negative = false;
+        
         return true;
     }
 }
diff --git a/src/engine/imap/parameter/imap-string-parameter.vala 
b/src/engine/imap/parameter/imap-string-parameter.vala
index b89d8e9..01b6f0b 100644
--- a/src/engine/imap/parameter/imap-string-parameter.vala
+++ b/src/engine/imap/parameter/imap-string-parameter.vala
@@ -52,7 +52,7 @@ public abstract class Geary.Imap.StringParameter : Geary.Imap.Parameter {
      * @see Parameter.get_for_string
      */
     public static StringParameter get_best_for(string value) throws ImapError {
-        if (NumberParameter.is_numeric(value, null))
+        if (NumberParameter.is_ascii_numeric(value, null))
             return new NumberParameter.from_ascii(value);
         
         switch (DataFormat.is_quoting_required(value)) {
@@ -164,22 +164,28 @@ public abstract class Geary.Imap.StringParameter : Geary.Imap.Parameter {
     }
     
     /**
-     * Converts the { link value} to an int, clamped between clamp_min and clamp_max.
+     * Converts the { link value} to a signed 32-bit integer, clamped between clamp_min and clamp_max.
      *
-     * TODO: This does not check that the value is a properly-formed integer.  This should be
-     *. added later.
+     * ImapError.INVALID is thrown if the { link StringParameter} contains non-numeric values.  No
+     * error is thrown if the numeric value is outside the clamped range.
      */
     public int32 as_int32(int32 clamp_min = int32.MIN, int32 clamp_max = int32.MAX) throws ImapError {
+        if (!NumberParameter.is_ascii_numeric(ascii, null))
+            throw new ImapError.INVALID("Cannot convert \"%s\" to int32: not numeric", ascii);
+        
         return (int32) int64.parse(ascii).clamp(clamp_min, clamp_max);
     }
     
     /**
-     * Converts the { link value} to a 64-bit integer, clamped between clamp_min and clamp_max.
+     * Converts the { link value} to a signed 64-bit integer, clamped between clamp_min and clamp_max.
      *
-     * TODO: This does not check that the value is a properly-formed 64-bit integer.  This should be
-     *. added later.
+     * ImapError.INVALID is thrown if the { link StringParameter} contains non-numeric values.  No
+     * error is thrown if the numeric value is outside the clamped range.
      */
     public int64 as_int64(int64 clamp_min = int64.MIN, int64 clamp_max = int64.MAX) throws ImapError {
+        if (!NumberParameter.is_ascii_numeric(ascii, null))
+            throw new ImapError.INVALID("Cannot convert \"%s\" to int64: not numeric", ascii);
+        
         return int64.parse(ascii).clamp(clamp_min, clamp_max);
     }
 }
diff --git a/src/engine/imap/response/imap-fetch-data-decoder.vala 
b/src/engine/imap/response/imap-fetch-data-decoder.vala
index 99f3676..b4d5667 100644
--- a/src/engine/imap/response/imap-fetch-data-decoder.vala
+++ b/src/engine/imap/response/imap-fetch-data-decoder.vala
@@ -85,7 +85,7 @@ public class Geary.Imap.UIDDecoder : Geary.Imap.FetchDataDecoder {
     }
     
     protected override MessageData decode_string(StringParameter stringp) throws ImapError {
-        return new UID(stringp.as_int64());
+        return new UID.checked(stringp.as_int64());
     }
 }
 
@@ -119,7 +119,7 @@ public class Geary.Imap.RFC822SizeDecoder : Geary.Imap.FetchDataDecoder {
     }
     
     protected override MessageData decode_string(StringParameter stringp) throws ImapError {
-        return new RFC822Size(stringp.as_int32());
+        return new RFC822Size(stringp.as_int64(0, int64.MAX));
     }
 }
 
diff --git a/src/engine/imap/response/imap-fetched-data.vala b/src/engine/imap/response/imap-fetched-data.vala
index f07455f..54292d4 100644
--- a/src/engine/imap/response/imap-fetched-data.vala
+++ b/src/engine/imap/response/imap-fetched-data.vala
@@ -49,7 +49,8 @@ public class Geary.Imap.FetchedData : Object {
         if (!server_data.get_as_string(2).equals_ci(FetchCommand.NAME))
             throw new ImapError.PARSE_ERROR("Not FETCH data: %s", server_data.to_string());
         
-        FetchedData fetched_data = new FetchedData(new 
SequenceNumber(server_data.get_as_string(1).as_int64()));
+        FetchedData fetched_data = new FetchedData(
+            new SequenceNumber.checked(server_data.get_as_string(1).as_int64()));
         
         // walk the list for each returned fetch data item, which is paired by its data item name
         // and the structured data itself
diff --git a/src/engine/imap/response/imap-response-code.vala 
b/src/engine/imap/response/imap-response-code.vala
index a6bb7b6..fbd8ce8 100644
--- a/src/engine/imap/response/imap-response-code.vala
+++ b/src/engine/imap/response/imap-response-code.vala
@@ -27,7 +27,7 @@ public class Geary.Imap.ResponseCode : Geary.Imap.ListParameter {
         if (!get_response_code_type().is_value(ResponseCodeType.UIDNEXT))
             throw new ImapError.INVALID("Not UIDNEXT: %s", to_string());
         
-        return new UID(get_as_string(1).as_int64());
+        return new UID.checked(get_as_string(1).as_int64());
     }
     
     /**
@@ -39,7 +39,7 @@ public class Geary.Imap.ResponseCode : Geary.Imap.ListParameter {
         if (!get_response_code_type().is_value(ResponseCodeType.UIDVALIDITY))
             throw new ImapError.INVALID("Not UIDVALIDITY: %s", to_string());
         
-        return new UIDValidity(get_as_string(1).as_int64());
+        return new UIDValidity.checked(get_as_string(1).as_int64());
     }
     
     /**
diff --git a/src/engine/imap/response/imap-server-data.vala b/src/engine/imap/response/imap-server-data.vala
index 076c42f..f4d6101 100644
--- a/src/engine/imap/response/imap-server-data.vala
+++ b/src/engine/imap/response/imap-server-data.vala
@@ -91,7 +91,7 @@ public class Geary.Imap.ServerData : ServerResponse {
         if (server_data_type != ServerDataType.EXPUNGE)
             throw new ImapError.INVALID("Not EXPUNGE data: %s", to_string());
         
-        return new SequenceNumber(get_as_string(1).as_int64());
+        return new SequenceNumber.checked(get_as_string(1).as_int64());
     }
     
     /**
diff --git a/src/engine/imap/response/imap-status-data.vala b/src/engine/imap/response/imap-status-data.vala
index ea0c40a..ea8d353 100644
--- a/src/engine/imap/response/imap-status-data.vala
+++ b/src/engine/imap/response/imap-status-data.vala
@@ -102,11 +102,11 @@ public class Geary.Imap.StatusData : Object {
                     break;
                     
                     case StatusDataType.UIDNEXT:
-                        uid_next = new UID(valuep.as_int64());
+                        uid_next = new UID.checked(valuep.as_int64());
                     break;
                     
                     case StatusDataType.UIDVALIDITY:
-                        uid_validity = new UIDValidity(valuep.as_int64());
+                        uid_validity = new UIDValidity.checked(valuep.as_int64());
                     break;
                     
                     case StatusDataType.UNSEEN:
diff --git a/src/engine/rfc822/rfc822-message-data.vala b/src/engine/rfc822/rfc822-message-data.vala
index fa0bb5a..76f8a0e 100644
--- a/src/engine/rfc822/rfc822-message-data.vala
+++ b/src/engine/rfc822/rfc822-message-data.vala
@@ -210,8 +210,8 @@ public class Geary.RFC822.Date : Geary.RFC822.MessageData, Geary.MessageData.Abs
     }
 }
 
-public class Geary.RFC822.Size : Geary.MessageData.LongMessageData, Geary.RFC822.MessageData {
-    public Size(long value) {
+public class Geary.RFC822.Size : Geary.MessageData.Int64MessageData, Geary.RFC822.MessageData {
+    public Size(int64 value) {
         base (value);
     }
 }


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