Hello community,
here is the log from the commit of package geary for openSUSE:Factory checked in at 2018-07-17 09:42:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/geary (Old)
and /work/SRC/openSUSE:Factory/.geary.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "geary"
Tue Jul 17 09:42:22 2018 rev:38 rq:623089 version:0.12.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/geary/geary.changes 2018-05-03 12:33:01.090921219 +0200
+++ /work/SRC/openSUSE:Factory/.geary.new/geary.changes 2018-07-17 09:43:38.225017453 +0200
@@ -1,0 +2,12 @@
+Sun Jul 15 17:52:06 UTC 2018 - bjorn.lie@gmail.com
+
+- Update to version 0.12.3:
+ + Not syncing mail using Turkish locale (bgo#795906).
+ + Fix crash saving an attachment with unknown content type.
+ + Fix crash in secret_collection_get_locked (bgo#795328).
+ + "Move to folder" selection bug glgo#GNOME/geary#24.
+ + Subfolders with special folders not displayed in list
+ glgo#GNOME/geary#11.
+ + Add OARS metadata for Flathub.
+
+-------------------------------------------------------------------
Old:
----
geary-0.12.2.tar.xz
New:
----
geary-0.12.3.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ geary.spec ++++++
--- /var/tmp/diff_new_pack.cUk7dT/_old 2018-07-17 09:43:39.065014374 +0200
+++ /var/tmp/diff_new_pack.cUk7dT/_new 2018-07-17 09:43:39.069014359 +0200
@@ -17,13 +17,14 @@
Name: geary
-Version: 0.12.2
+Version: 0.12.3
Release: 0
Summary: An email reader for the GNOME desktop
License: LGPL-2.1-or-later AND CC-BY-3.0 AND BSD-2-Clause
Group: Productivity/Networking/Email/Clients
URL: https://wiki.gnome.org/Apps/Geary
-Source: http://download.gnome.org/sources/geary/0.12/%{name}-%{version}.tar.xz
+Source0: https://download.gnome.org/sources/geary/0.12/%{name}-%{version}.tar.xz
+
BuildRequires: cmake
BuildRequires: fdupes
BuildRequires: intltool
++++++ geary-0.12.2.tar.xz -> geary-0.12.3.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/.gitlab-ci.yml new/geary-0.12.3/.gitlab-ci.yml
--- old/geary-0.12.2/.gitlab-ci.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/geary-0.12.3/.gitlab-ci.yml 2018-07-14 04:39:08.000000000 +0200
@@ -0,0 +1,110 @@
+#
+# Geary CI config.
+#
+
+stages:
+ - build
+
+variables:
+ BUILD_DIR: build
+ CONFIG_CMD: ./configure
+ BUILD_CMD: make
+ TEST_CMD: xvfb-run make test
+ INSTALL_CMD: make install
+ FEDORA_BUILD_DEPS: gcc make
+ FEDORA_DEPS: vala gobject-introspection-devel intltool cmake
+ desktop-file-utils gnome-doc-utils libcanberra-devel
+ libgee-devel glib2-devel gmime-devel gtk3-devel
+ libnotify-devel sqlite-devel webkitgtk4-devel
+ libsecret-devel libxml2-devel vala-tools gcr-devel
+ enchant-devel
+ FEDORA_TEST_DEPS: Xvfb
+ DEBIAN_DEPS: valac libgirepository1.0-dev intltool cmake
+ desktop-file-utils gnome-doc-utils libcanberra-dev
+ libgee-0.8-dev libglib2.0-dev libgmime-2.6-dev
+ libgtk-3-dev libsecret-1-dev libxml2-dev libnotify-dev
+ libsqlite3-dev libwebkit2gtk-4.0-dev libgcr-3-dev
+ libenchant-dev
+ DEBIAN_TEST_DEPS: xauth xvfb
+ UBUNTU_DEPS: $DEBIAN_DEPS libunity-dev libmessaging-menu-dev
+ UBUNTU_TEST_DEPS: xauth xvfb
+
+#
+# Stages
+#
+
+fedora:
+ stage: build
+ image: fedora:latest
+ before_script:
+ - dnf update -y --nogpgcheck
+ - dnf install -y --nogpgcheck $FEDORA_BUILD_DEPS $FEDORA_DEPS $FEDORA_TEST_DEPS
+ script:
+ - $CONFIG_CMD
+ - $BUILD_CMD
+ - $TEST_CMD
+ - $INSTALL_CMD
+
+debian:
+ stage: build
+ image: debian:stable
+ before_script:
+ - apt-get update
+ - apt-get install -q -y --no-install-recommends $DEBIAN_DEPS $DEBIAN_TEST_DEPS
+ script:
+ - $CONFIG_CMD
+ - $BUILD_CMD
+ - $TEST_CMD
+ - $INSTALL_CMD
+
+ubuntu:
+ stage: build
+ image: ubuntu:xenial
+ before_script:
+ - apt-get update
+ - apt-get install -q -y --no-install-recommends $UBUNTU_DEPS $UBUNTU_TEST_DEPS
+ script:
+ - $CONFIG_CMD
+ - $BUILD_CMD
+ - $TEST_CMD
+ - $INSTALL_CMD
+
+deb-package:
+ stage: build
+ image: ubuntu:xenial
+ before_script:
+ - apt-get update
+ - apt-get install -q -y --no-install-recommends packaging-dev $UBUNTU_DEPS
+ script:
+ - dpkg-buildpackage -b -us -uc
+
+flatpack-package:
+ image: registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:3.28
+ stage: build
+
+ variables:
+ GIT_SUBMODULE_STRATEGY: normal
+ FLATPAK_ARTIFACT: geary-git.flatpak
+
+ script:
+ - flatpak-builder flatpak-build org.gnome.Geary.json
+ - flatpak build-export flatpak-repo flatpak-build --update-appstream
+ - flatpak build-bundle flatpak-repo $FLATPAK_ARTIFACT
+ --runtime-repo=https://sdk.gnome.org/gnome-nightly.flatpakrepo
+ org.gnome.Geary
+
+ artifacts:
+ paths:
+ - $FLATPAK_ARTIFACT
+ expire_in: 2 days
+
+ cache:
+ # JOB_NAME - Each job will have it's own cache
+ # COMMIT_REF_SLUG = Lowercase name of the branch
+ # ^ Keep diffrerent caches for each branch
+ key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
+ paths:
+ # Cache .flatpak-builder
+ - .flatpak-builder/cache/
+ - .flatpak-builder/downloads/
+ - .flatpak-builder/git/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/CMakeLists.txt new/geary-0.12.3/CMakeLists.txt
--- old/geary-0.12.2/CMakeLists.txt 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/CMakeLists.txt 2018-07-14 04:39:08.000000000 +0200
@@ -19,7 +19,7 @@
#
set(GETTEXT_PACKAGE "geary")
set(RELEASE_NAME "Lightweight email client for GNOME.")
-set(VERSION "0.12.2")
+set(VERSION "0.12.3")
set(VERSION_INFO "Release")
set(LANGUAGE_SUPPORT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/share/locale)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/NEWS new/geary-0.12.3/NEWS
--- old/geary-0.12.2/NEWS 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/NEWS 2018-07-14 04:39:08.000000000 +0200
@@ -1,3 +1,19 @@
+Version 0.12.3
+~~~~~~~~~~~~~~
+Released: 2018-07-14
+
+Bug fixes included in this release:
+ * Not syncing mail using Turkish locale. Bug 795906
+ * Fix crash saving an attachment with unknown content type
+ * Fix crash in secret_collection_get_locked. Bug 795328
+ * "Move to folder" selection bug. Issue #24
+ * Subfolders with special folders not displayed in list. Issue #11
+ * Add OARS metadata for Flathub
+
+Thanks to all who contributed code fixes and enhancements to this
+release:
+ * Nick Richards
+
Version 0.12.2
~~~~~~~~~~~~~~
Released: 2018-04-24
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/THANKS new/geary-0.12.3/THANKS
--- old/geary-0.12.2/THANKS 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/THANKS 2018-07-14 04:39:08.000000000 +0200
@@ -56,6 +56,7 @@
Mario Sanchez Prada
Tiago Quelhas
Viko Adi Rahmawan
+nick richards
ritchiew
Leonardo Robol
Didier Roche
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/desktop/org.gnome.Geary.appdata.xml.in new/geary-0.12.3/desktop/org.gnome.Geary.appdata.xml.in
--- old/geary-0.12.2/desktop/org.gnome.Geary.appdata.xml.in 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/desktop/org.gnome.Geary.appdata.xml.in 2018-07-14 04:39:08.000000000 +0200
@@ -77,6 +77,21 @@
<translation type="gettext">geary</translation>
<releases>
+ <release version="0.12.3" date="2018-07-14">
+ <description>
+ <p>Bug fixes included in this release:</p>
+ <ul>
+ <li>Not syncing mail using Turkish locale. Bug 795906</li>
+ <li>Fix crash saving an attachment with unknown content type</li>
+ <li>Fix crash in secret_collection_get_locked. Bug 795328</li>
+ <li>"Move to folder" selection bug. Issue #24</li>
+ <li>Subfolders with special folders not displayed in
+ list. Issue #11</li>
+ <li>Add OARS metadata for Flathub</li>
+ </ul>
+ </description>
+ </release>
+
<release version="0.12.2" date="2018-04-24">
<description>
<p>Bug fixes included in this release:</p>
@@ -165,4 +180,33 @@
</description>
</release>
</releases>
+
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ none
+ intense
+ none
+ none
+ none
+ intense
+ none
+ none
+
</component>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/client/application/geary-controller.vala new/geary-0.12.3/src/client/application/geary-controller.vala
--- old/geary-0.12.2/src/client/application/geary-controller.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/client/application/geary-controller.vala 2018-07-14 04:39:08.000000000 +0200
@@ -1606,12 +1606,23 @@
);
}
- private void on_special_folder_type_changed(Geary.Folder folder, Geary.SpecialFolderType old_type,
- Geary.SpecialFolderType new_type) {
+ private void on_special_folder_type_changed(Geary.Folder folder,
+ Geary.SpecialFolderType old_type,
+ Geary.SpecialFolderType new_type) {
main_window.folder_list.remove_folder(folder);
main_window.folder_list.add_folder(folder);
+ // Since removing the folder will also remove its children, we
+ // need to check for any and re-add them. See isssue #11.
+ try {
+ foreach (Geary.Folder child in
+ folder.account.list_matching_folders(folder.path)) {
+ main_window.folder_list.add_folder(child);
+ }
+ } catch (Error err) {
+ // Oh well
+ }
}
-
+
private void on_engine_opened() {
// Locate the first account so we can select its inbox when available.
try {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/client/application/secret-mediator.vala new/geary-0.12.3/src/client/application/secret-mediator.vala
--- old/geary-0.12.2/src/client/application/secret-mediator.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/client/application/secret-mediator.vala 2018-07-14 04:39:08.000000000 +0200
@@ -157,13 +157,19 @@
Secret.Service service = yield Secret.Service.get(
Secret.ServiceFlags.OPEN_SESSION, cancellable
);
- Secret.Collection collection = yield Secret.Collection.for_alias(
+ Secret.Collection? collection = yield Secret.Collection.for_alias(
service,
Secret.COLLECTION_DEFAULT,
Secret.CollectionFlags.NONE,
cancellable
);
- if (collection.get_locked()) {
+
+ // For custom desktop setups, it is possible that the current
+ // session has a service responding on DBus but no password
+ // keyring. There's no much we can do in this case except just
+ // check for the collection being null so we don't crash. See
+ // Bug 795328.
+ if (collection != null && collection.get_locked()) {
List to_lock = new List();
to_lock.append(collection);
List<DBusProxy> unlocked;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/api/geary-attachment.vala new/geary-0.12.3/src/engine/api/geary-attachment.vala
--- old/geary-0.12.2/src/engine/api/geary-attachment.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/api/geary-attachment.vala 2018-07-14 04:39:08.000000000 +0200
@@ -155,7 +155,7 @@
}
}
string? ext = mime_type.get_file_name_extension();
- if (!file_name.has_suffix(ext)) {
+ if (ext != null && !file_name.has_suffix(ext)) {
file_name = file_name + (ext ?? "");
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/imap/message/imap-data-format.vala new/geary-0.12.3/src/engine/imap/message/imap-data-format.vala
--- old/geary-0.12.2/src/engine/imap/message/imap-data-format.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/imap/message/imap-data-format.vala 2018-07-14 04:39:08.000000000 +0200
@@ -23,10 +23,10 @@
private bool is_special_char(char ch, char[] ar, string? exceptions) {
if (ch > 0x7F || ch.iscntrl())
return true;
-
+
if (ch in ar)
- return (exceptions != null) ? exceptions.index_of_char(ch) < 0 : true;
-
+ return (exceptions != null) ? Ascii.index_of(exceptions, ch) < 0 : true;
+
return false;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/imap/message/imap-fetch-body-data-specifier.vala new/geary-0.12.3/src/engine/imap/message/imap-fetch-body-data-specifier.vala
--- old/geary-0.12.2/src/engine/imap/message/imap-fetch-body-data-specifier.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/imap/message/imap-fetch-body-data-specifier.vala 2018-07-14 04:39:08.000000000 +0200
@@ -73,15 +73,15 @@
assert_not_reached();
}
}
-
+
public static SectionPart deserialize(string value) throws ImapError {
if (String.is_empty(value))
return NONE;
-
- switch (value.down()) {
+
+ switch (Ascii.strdown(value)) {
case "header":
return HEADER;
-
+
case "header.fields":
return HEADER_FIELDS;
@@ -178,25 +178,23 @@
this.subset_start = subset_start;
this.subset_count = subset_count;
this.is_peek = is_peek;
-
+
if (field_names != null && field_names.length > 0) {
- this.field_names = new Gee.TreeSet<string>((s1, s2) => {
- return GLib.strcmp(s1, s2);
- });
+ this.field_names = new Gee.TreeSet<string>(Ascii.strcmp);
foreach (string field_name in field_names) {
- string converted = field_name.strip().down();
-
+ string converted = Ascii.strdown(field_name.strip());
+
if (!String.is_empty(converted))
this.field_names.add(converted);
}
} else {
this.field_names = null;
}
-
+
// see equal_to() for why the response version is used
hashable = serialize_response();
}
-
+
/**
* Returns the {@link FetchBodyDataSpecifier} in a string ready for a {@link Command}.
*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/imap/message/imap-internal-date.vala new/geary-0.12.3/src/engine/imap/message/imap-internal-date.vala
--- old/geary-0.12.2/src/engine/imap/message/imap-internal-date.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/imap/message/imap-internal-date.vala 2018-07-14 04:39:08.000000000 +0200
@@ -64,18 +64,18 @@
|| year < 1970) {
throw new ImapError.PARSE_ERROR("Invalid INTERNALDATE \"%s\": bad numerical range", internaldate);
}
-
+
// check month (this catches localization problems)
int month = -1;
- string mon_down = ((string) mon).down();
+ string mon_down = Ascii.strdown(((string) mon));
for (int ctr = 0; ctr < EN_US_MON_DOWN.length; ctr++) {
if (mon_down == EN_US_MON_DOWN[ctr]) {
month = ctr;
-
+
break;
}
}
-
+
if (month < 0)
throw new ImapError.PARSE_ERROR("Invalid INTERNALDATE \"%s\": bad month", internaldate);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/imap/message/imap-mailbox-specifier.vala new/geary-0.12.3/src/engine/imap/message/imap-mailbox-specifier.vala
--- old/geary-0.12.2/src/engine/imap/message/imap-mailbox-specifier.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/imap/message/imap-mailbox-specifier.vala 2018-07-14 04:39:08.000000000 +0200
@@ -72,7 +72,7 @@
public static bool is_inbox_name(string name) {
return Ascii.stri_equal(name, CANONICAL_INBOX_NAME);
}
-
+
/**
* Returns true if the string is the ''canonical'' name of the IMAP Inbox.
*
@@ -85,9 +85,9 @@
* @see is_inbox_name
*/
public static bool is_canonical_inbox_name(string name) {
- return (name == CANONICAL_INBOX_NAME);
+ return Ascii.str_equal(name, CANONICAL_INBOX_NAME);
}
-
+
/**
* Converts a generic {@link FolderPath} into an IMAP mailbox specifier.
*/
@@ -175,27 +175,27 @@
public uint hash() {
return is_inbox ? Ascii.stri_hash(name) : Ascii.str_hash(name);
}
-
+
public bool equal_to(MailboxSpecifier other) {
if (this == other)
return true;
-
+
if (is_inbox)
return Ascii.stri_equal(name, other.name);
-
- return (name == other.name);
+
+ return Ascii.str_equal(name, other.name);
}
-
+
public int compare_to(MailboxSpecifier other) {
if (this == other)
return 0;
-
+
if (is_inbox && other.is_inbox)
return 0;
-
- return GLib.strcmp(name, other.name);
+
+ return Ascii.strcmp(name, other.name);
}
-
+
public string to_string() {
return name;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/imap/parameter/imap-string-parameter.vala new/geary-0.12.3/src/engine/imap/parameter/imap-string-parameter.vala
--- old/geary-0.12.2/src/engine/imap/parameter/imap-string-parameter.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/imap/parameter/imap-string-parameter.vala 2018-07-14 04:39:08.000000000 +0200
@@ -134,35 +134,35 @@
public bool is_empty() {
return String.is_empty(ascii);
}
-
+
/**
* Case-sensitive comparison.
*/
public bool equals_cs(string value) {
- return (ascii == value);
+ return Ascii.str_equal(ascii, value);
}
-
+
/**
* Case-insensitive comparison.
*/
public bool equals_ci(string value) {
return Ascii.stri_equal(ascii, value);
}
-
+
/**
* Returns the string lowercased.
*/
public string as_lower() {
- return ascii.down();
+ return Ascii.strdown(ascii);
}
-
+
/**
* Returns the string uppercased.
*/
public string as_upper() {
- return ascii.up();
+ return Ascii.strup(ascii);
}
-
+
/**
* Converts the {@link ascii} to a signed 32-bit integer, clamped between clamp_min and
* clamp_max.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/imap/response/imap-response-code-type.vala new/geary-0.12.3/src/engine/imap/response/imap-response-code-type.vala
--- old/geary-0.12.2/src/engine/imap/response/imap-response-code-type.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/imap/response/imap-response-code-type.vala 2018-07-14 04:39:08.000000000 +0200
@@ -64,17 +64,17 @@
public ResponseCodeType.from_parameter(StringParameter stringp) throws ImapError {
init(stringp.ascii);
}
-
+
private void init(string ascii) throws ImapError {
// note that is_quoting_required() also catches empty strings (as they require quoting)
if (DataFormat.is_quoting_required(ascii) != DataFormat.Quoting.OPTIONAL)
throw new ImapError.INVALID("\"%s\" cannot be represented as a ResponseCodeType", ascii);
-
+
// store lowercased so it's easily compared with const strings above
original = ascii;
- value = ascii.down();
+ value = Ascii.strdown(ascii);
}
-
+
public bool is_value(string str) {
return Ascii.stri_equal(value, str);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/mime/mime-content-parameters.vala new/geary-0.12.3/src/engine/mime/mime-content-parameters.vala
--- old/geary-0.12.2/src/engine/mime/mime-content-parameters.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/mime/mime-content-parameters.vala 2018-07-14 04:39:08.000000000 +0200
@@ -78,7 +78,7 @@
return (stored != null) ? Ascii.stri_equal(stored, value) : false;
}
-
+
/**
* Returns true if the attribute has the supplied value (case-sensitive comparison).
*
@@ -86,10 +86,10 @@
*/
public bool has_value_cs(string attribute, string value) {
string? stored = params.get(attribute);
-
- return (stored != null) ? (stored == value) : false;
+
+ return (stored != null) ? Ascii.str_equal(stored, value) : false;
}
-
+
/**
* Add or replace the parameter.
*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/mime/mime-content-type.vala new/geary-0.12.3/src/engine/mime/mime-content-type.vala
--- old/geary-0.12.2/src/engine/mime/mime-content-type.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/mime/mime-content-type.vala 2018-07-14 04:39:08.000000000 +0200
@@ -79,9 +79,9 @@
int max_len = 4096;
// XXX determine actual max needed buffer size using
// xdg_mime_get_max_buffer_extents?
- uint8[] data = (max_len > buf.size)
- ? buf.get_bytes()[0:max_len - 1].get_data()
- : buf.get_uint8_array();
+ uint8[] data = (buf.size <= max_len)
+ ? buf.get_uint8_array()
+ : buf.get_bytes()[0:max_len].get_data();
// XXX might just want to use xdgmime lib directly here to
// avoid the intermediate glib_content_type step here?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/mime/mime-disposition-type.vala new/geary-0.12.3/src/engine/mime/mime-disposition-type.vala
--- old/geary-0.12.2/src/engine/mime/mime-disposition-type.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/mime/mime-disposition-type.vala 2018-07-14 04:39:08.000000000 +0200
@@ -31,24 +31,24 @@
*/
public static DispositionType deserialize(string? str, out bool is_unknown) {
is_unknown = false;
-
+
if (String.is_empty_or_whitespace(str))
return UNSPECIFIED;
-
- switch (str.down()) {
+
+ switch (Ascii.strdown(str)) {
case "inline":
return INLINE;
-
+
case "attachment":
return ATTACHMENT;
-
+
default:
is_unknown = true;
-
+
return ATTACHMENT;
}
}
-
+
/**
* Returns null if value is {@link UNSPECIFIED}
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/mime/mime-multipart-subtype.vala new/geary-0.12.3/src/engine/mime/mime-multipart-subtype.vala
--- old/geary-0.12.2/src/engine/mime/mime-multipart-subtype.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/mime/mime-multipart-subtype.vala 2018-07-14 04:39:08.000000000 +0200
@@ -48,24 +48,24 @@
public static MultipartSubtype from_content_type(ContentType? content_type, out bool is_unknown) {
if (content_type == null || !content_type.has_media_type("multipart")) {
is_unknown = true;
-
+
return MIXED;
}
-
+
is_unknown = false;
- switch (content_type.media_subtype.down()) {
+ switch (Ascii.strdown(content_type.media_subtype)) {
case "mixed":
return MIXED;
-
+
case "alternative":
return ALTERNATIVE;
-
+
case "related":
return RELATED;
-
+
default:
is_unknown = true;
-
+
return MIXED;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/rfc822/rfc822-mailbox-address.vala new/geary-0.12.3/src/engine/rfc822/rfc822-mailbox-address.vala
--- old/geary-0.12.2/src/engine/rfc822/rfc822-mailbox-address.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/rfc822/rfc822-mailbox-address.vala 2018-07-14 04:39:08.000000000 +0200
@@ -53,7 +53,7 @@
source_route = null;
- int atsign = address.index_of_char('@');
+ int atsign = Ascii.index_of(address, '@');
if (atsign > 0) {
mailbox = address.slice(0, atsign);
domain = address.slice(atsign + 1, address.length);
@@ -62,7 +62,7 @@
domain = "";
}
}
-
+
public MailboxAddress.imap(string? name, string? source_route, string mailbox, string domain) {
this.name = (name != null) ? decode_name(name) : null;
this.source_route = source_route;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/smtp/smtp-command.vala new/geary-0.12.3/src/engine/smtp/smtp-command.vala
--- old/geary-0.12.2/src/engine/smtp/smtp-command.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/smtp/smtp-command.vala 2018-07-14 04:39:08.000000000 +0200
@@ -56,36 +56,36 @@
assert_not_reached();
}
}
-
+
public static Command deserialize(string str) throws SmtpError {
- switch (str.down()) {
+ switch (Ascii.strdown(str)) {
case "helo":
return HELO;
-
+
case "ehlo":
return EHLO;
-
+
case "quit":
return QUIT;
-
+
case "help":
return HELP;
-
+
case "noop":
return NOOP;
-
+
case "rset":
return RSET;
-
+
case "auth":
return AUTH;
-
+
case "mail":
return MAIL;
-
+
case "rcpt":
return RCPT;
-
+
case "data":
return DATA;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/smtp/smtp-greeting.vala new/geary-0.12.3/src/engine/smtp/smtp-greeting.vala
--- old/geary-0.12.2/src/engine/smtp/smtp-greeting.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/smtp/smtp-greeting.vala 2018-07-14 04:39:08.000000000 +0200
@@ -25,21 +25,21 @@
return "";
}
}
-
+
public static ServerFlavor deserialize(string str) {
- switch (str.up()) {
+ switch (Ascii.strup(str)) {
case "SMTP":
return SMTP;
-
+
case "ESMTP":
return ESMTP;
-
+
default:
return UNSPECIFIED;
}
}
}
-
+
public string? domain { get; private set; default = null; }
public ServerFlavor flavor { get; private set; default = ServerFlavor.UNSPECIFIED; }
public string? message { get; private set; default = null; }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/src/engine/util/util-ascii.vala new/geary-0.12.3/src/engine/util/util-ascii.vala
--- old/geary-0.12.2/src/engine/util/util-ascii.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/src/engine/util/util-ascii.vala 2018-07-14 04:39:08.000000000 +0200
@@ -4,40 +4,71 @@
* (version 2.1 or later). See the COPYING file in this distribution.
*/
+// These calls are bound to the string class in Vala 0.26. When that version of Vala is the
+// minimum, these can be dropped and Ascii.strup and Ascii.strdown can use the string methods.
+extern string g_ascii_strup(string str, ssize_t len = -1);
+extern string g_ascii_strdown(string str, ssize_t len = -1);
+
namespace Geary.Ascii {
+public int index_of(string str, char ch) {
+ char *strptr = str;
+ int index = 0;
+ for (;;) {
+ char strch = *strptr++;
+
+ if (strch == String.EOS)
+ return -1;
+
+ if (strch == ch)
+ return index;
+
+ index++;
+ }
+}
+
public bool get_next_char(string str, ref int index, out char ch) {
ch = str[index++];
-
+
return ch != String.EOS;
}
-public bool stri_equal(string a, string b) {
- // XXX Is this marginally faster than a.down() == b.down() in the
- // best case, slower in the worse case, so not worth it?
+public inline int strcmp(string a, string b) {
+ return GLib.strcmp(a, b);
+}
+
+public int stricmp(string a, string b) {
char *aptr = a;
char *bptr = b;
for (;;) {
int diff = (int) (*aptr).tolower() - (int) (*bptr).tolower();
if (diff != 0)
- return false;
-
+ return diff;
+
if (*aptr == String.EOS)
- return true;
-
+ return 0;
+
aptr++;
bptr++;
}
}
+public inline bool str_equal(string a, string b) {
+ return a == b;
+}
+
+public inline bool stri_equal(string a, string b) {
+ return stricmp(a, b) == 0;
+}
+
public bool nullable_stri_equal(string? a, string? b) {
if (a == null)
return (b == null);
-
+
// a != null, so always false
if (b == null)
return false;
-
+
return stri_equal(a, b);
}
@@ -55,6 +86,14 @@
return (str != null) ? stri_hash(str) : 0;
}
+public string strdown(string str) {
+ return g_ascii_strdown(str);
+}
+
+public string strup(string str) {
+ return g_ascii_strup(str);
+}
+
/**
* Returns true if the ASCII string contains only whitespace and at least one numeric character.
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/test/engine/api/geary-attachment-test.vala new/geary-0.12.3/test/engine/api/geary-attachment-test.vala
--- old/geary-0.12.2/test/engine/api/geary-attachment-test.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/test/engine/api/geary-attachment-test.vala 2018-07-14 04:39:08.000000000 +0200
@@ -56,6 +56,8 @@
get_safe_file_name_with_default_content_type);
add_test("get_safe_file_name_with_default_content_type_bad_file_name",
get_safe_file_name_with_default_content_type_bad_file_name);
+ add_test("get_safe_file_name_with_unknown_content_type",
+ get_safe_file_name_with_unknown_content_type);
}
public override void set_up() {
@@ -235,4 +237,24 @@
assert(test.get_safe_file_name.end(async_result()) == RESULT_FILENAME);
}
+ public void get_safe_file_name_with_unknown_content_type() {
+ const string TEST_FILENAME = "test-filename.unlikely";
+ Attachment test = new TestAttachment(
+ ATTACHMENT_ID,
+ this.default_type,
+ CONTENT_ID,
+ CONTENT_DESC,
+ content_disposition,
+ TEST_FILENAME,
+ File.new_for_path(TEST_FILENAME),
+ 742
+ );
+
+ test.get_safe_file_name.begin(null, (obj, ret) => {
+ async_complete(ret);
+ });
+
+ assert(TEST_FILENAME == test.get_safe_file_name.end(async_result()));
+ }
+
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geary-0.12.2/test/engine/imap/transport/imap-deserializer-test.vala new/geary-0.12.3/test/engine/imap/transport/imap-deserializer-test.vala
--- old/geary-0.12.2/test/engine/imap/transport/imap-deserializer-test.vala 2018-04-24 02:22:39.000000000 +0200
+++ new/geary-0.12.3/test/engine/imap/transport/imap-deserializer-test.vala 2018-07-14 04:39:08.000000000 +0200
@@ -48,8 +48,8 @@
public void test_gmail_greeting() {
string greeting = "* OK Gimap ready for requests from 115.187.245.46 c194mb399904375ivc";
- this.stream.add_data(greeting.data);
- this.stream.add_data(EOL.data);
+ this.stream.add_data(greeting.data, g_free);
+ this.stream.add_data(EOL.data, g_free);
this.process.begin(Expect.MESSAGE, (obj, ret) => { async_complete(ret); });
RootParameters? message = this.process.end(async_result());
@@ -59,8 +59,8 @@
public void test_cyrus_2_4_greeting() {
string greeting = "* OK [CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE AUTH=PLAIN SASL-IR] mogul Cyrus IMAP v2.4.12-Debian-2.4.12-2 server ready";
- this.stream.add_data(greeting.data);
- this.stream.add_data(EOL.data);
+ this.stream.add_data(greeting.data, g_free);
+ this.stream.add_data(EOL.data, g_free);
this.process.begin(Expect.MESSAGE, (obj, ret) => { async_complete(ret); });
RootParameters? message = this.process.end(async_result());
@@ -71,8 +71,8 @@
public void test_aliyun_greeting() {
string greeting = "* OK AliYun IMAP Server Ready(10.147.40.164)";
string parsed = "* OK AliYun IMAP Server Ready (10.147.40.164)";
- this.stream.add_data(greeting.data);
- this.stream.add_data(EOL.data);
+ this.stream.add_data(greeting.data, g_free);
+ this.stream.add_data(EOL.data, g_free);
this.process.begin(Expect.MESSAGE, (obj, ret) => { async_complete(ret); });
RootParameters? message = this.process.end(async_result());
@@ -82,8 +82,8 @@
public void test_invalid_atom_prefix() {
string flags = """* OK %atom""";
- this.stream.add_data(flags.data);
- this.stream.add_data(EOL.data);
+ this.stream.add_data(flags.data, g_free);
+ this.stream.add_data(EOL.data, g_free);
this.process.begin(Expect.DESER_FAIL, (obj, ret) => { async_complete(ret); });
this.process.end(async_result());
@@ -91,8 +91,8 @@
public void test_gmail_flags() {
string flags = """* FLAGS (\Answered \Flagged \Draft \Deleted \Seen $NotPhishing $Phishing)""";
- this.stream.add_data(flags.data);
- this.stream.add_data(EOL.data);
+ this.stream.add_data(flags.data, g_free);
+ this.stream.add_data(EOL.data, g_free);
this.process.begin(Expect.MESSAGE, (obj, ret) => { async_complete(ret); });
RootParameters? message = this.process.end(async_result());
@@ -102,8 +102,8 @@
public void test_gmail_permanent_flags() {
string flags = """* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen $NotPhishing $Phishing \*)] Flags permitted.""";
- this.stream.add_data(flags.data);
- this.stream.add_data(EOL.data);
+ this.stream.add_data(flags.data, g_free);
+ this.stream.add_data(EOL.data, g_free);
this.process.begin(Expect.MESSAGE, (obj, ret) => { async_complete(ret); });
RootParameters? message = this.process.end(async_result());
@@ -113,8 +113,8 @@
public void test_cyrus_flags() {
string flags = """* 2934 FETCH (FLAGS (\Answered \Seen $Quuxo::Spam::Trained) UID 3041)""";
- this.stream.add_data(flags.data);
- this.stream.add_data(EOL.data);
+ this.stream.add_data(flags.data, g_free);
+ this.stream.add_data(EOL.data, g_free);
this.process.begin(Expect.MESSAGE, (obj, ret) => { async_complete(ret); });
RootParameters? message = this.process.end(async_result());
@@ -128,8 +128,8 @@
// distinct atom.
string flags = """* OK \*atom""";
string expected = """* OK \* atom""";
- this.stream.add_data(flags.data);
- this.stream.add_data(EOL.data);
+ this.stream.add_data(flags.data, g_free);
+ this.stream.add_data(EOL.data, g_free);
this.process.begin(Expect.MESSAGE, (obj, ret) => { async_complete(ret); });
RootParameters? message = this.process.end(async_result());
@@ -139,8 +139,8 @@
public void test_invalid_flag_prefix() {
string flags = """* OK \%atom""";
- this.stream.add_data(flags.data);
- this.stream.add_data(EOL.data);
+ this.stream.add_data(flags.data, g_free);
+ this.stream.add_data(EOL.data, g_free);
this.process.begin(Expect.DESER_FAIL, (obj, ret) => { async_complete(ret); });
this.process.end(async_result());
@@ -154,7 +154,7 @@
public void test_bye_eos() {
string bye = """* OK bye""";
- this.stream.add_data(bye.data);
+ this.stream.add_data(bye.data, g_free);
bool eos = false;
this.deser.eos.connect(() => { eos = true; });
@@ -211,6 +211,12 @@
assert_not_reached();
}
+ // Process any remaining async tasks the deserializer might
+ // have left over.
+ while (this.main_loop.pending()) {
+ this.main_loop.iteration(true);
+ }
+
return message;
}