Hello community,

here is the log from the commit of package file-roller for openSUSE:Factory 
checked in at 2017-12-29 18:46:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/file-roller (Old)
 and      /work/SRC/openSUSE:Factory/.file-roller.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "file-roller"

Fri Dec 29 18:46:55 2017 rev:135 rq:558863 version:3.26.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/file-roller/file-roller.changes  2017-11-03 
19:07:22.329313787 +0100
+++ /work/SRC/openSUSE:Factory/.file-roller.new/file-roller.changes     
2017-12-29 18:47:01.235912445 +0100
@@ -1,0 +2,12 @@
+Wed Dec 13 19:02:07 UTC 2017 - mgo...@suse.com
+
+- Add file-roller-ignore-unrar-if-wrapper.patch: Since unrar is
+  non-free and it is planned to include a limited wrapper that
+  would call unar, we should avoid this wrapper and call unar
+  directly (bsc#1072118).
+- Add file-roller-rar-file-date.patch: fix wrong file date when
+  using rar 5.30 or higher (bgo#758121).
+- Add file-roller-unar-dir-critical.patch: fix a warning when
+  parsing lsar output (bgo#791505).
+
+-------------------------------------------------------------------

New:
----
  file-roller-ignore-unrar-if-wrapper.patch
  file-roller-rar-file-date.patch
  file-roller-unar-dir-critical.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ file-roller.spec ++++++
--- /var/tmp/diff_new_pack.dsza7Y/_old  2017-12-29 18:47:02.127656334 +0100
+++ /var/tmp/diff_new_pack.dsza7Y/_new  2017-12-29 18:47:02.131655185 +0100
@@ -28,6 +28,12 @@
 Patch0:         file-roller-3.4-change-archiver-priority.patch
 # PATCH-FEATURE-OPENSUSE file-roller-pkg-match.patch bnc#696530 
dims...@opensuse.org -- List package match names for automatic installation 
using PK.
 Patch1:         file-roller-pkg-match.patch
+# PATCH-FIX-OPENSUSE file-roller-ignore-unrar-if-wrapper.patch bsc#1072118 
mgo...@suse.com -- if unrar is a wrapper script for unar, then ignore it, and 
use unar instead.
+Patch2:         file-roller-ignore-unrar-if-wrapper.patch
+# PATCH-FIX-UPSTREAM file-roller-rar-file-date.patch bgo#758121 
mgo...@suse.com -- fix wrong file date when using rar 5.30 or higher.
+Patch3:         file-roller-rar-file-date.patch
+# PATCH-FIX-UPSTREAM file-roller-unar-dir-critical.patch bgo#791505 
mgo...@suse.com -- fix warning when parsing lsar output.
+Patch4:         file-roller-unar-dir-critical.patch
 # Needed for directory ownership
 BuildRequires:  dbus-1
 BuildRequires:  fdupes
@@ -84,6 +90,9 @@
 %setup -q
 %patch0
 %patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
 %if !0%{?is_opensuse}
 translation-update-upstream
 %endif

++++++ file-roller-ignore-unrar-if-wrapper.patch ++++++
diff -urp file-roller-3.26.2.orig/src/fr-command-rar.c 
file-roller-3.26.2/src/fr-command-rar.c
--- file-roller-3.26.2.orig/src/fr-command-rar.c        2017-10-31 
15:07:52.000000000 -0500
+++ file-roller-3.26.2/src/fr-command-rar.c     2017-12-13 12:25:16.159981774 
-0600
@@ -705,6 +705,39 @@ fr_command_rar_get_mime_types (FrArchive
        return rar_mime_type;
 }
 
+static gboolean
+unrar_is_suse_wrapper ()
+{
+  const gchar *path = g_getenv ("PATH");
+  gchar **paths;
+  gchar **pp;
+  gchar *p;
+  gchar *full_name;
+  FILE *fp;
+  char bytes[2];
+  gboolean ret = FALSE;
+
+  if (!path)
+    path = "/usr/bin";
+
+  paths = g_strsplit (path, ":", 0);
+  for (pp = paths; *pp; pp++)
+    {
+      p = *pp;
+      full_name = g_strconcat (p, "/unrar", NULL);
+      fp = fopen (full_name, "r");
+      g_free (full_name);
+      if (!fp)
+        continue;
+      bytes[0] = bytes[1] = 0;
+      fread (bytes, 2, 1, fp);
+      fclose (fp);
+      ret = (bytes[0] == '#' && bytes[1] == '!');
+      break;
+    }
+  g_strfreev (paths);
+  return ret;
+}
 
 static FrArchiveCap
 fr_command_rar_get_capabilities (FrArchive  *archive,
@@ -716,7 +749,7 @@ fr_command_rar_get_capabilities (FrArchi
        capabilities = FR_ARCHIVE_CAN_STORE_MANY_FILES | FR_ARCHIVE_CAN_ENCRYPT 
| FR_ARCHIVE_CAN_ENCRYPT_HEADER;
        if (_g_program_is_available ("rar", check_command))
                capabilities |= FR_ARCHIVE_CAN_READ_WRITE | 
FR_ARCHIVE_CAN_CREATE_VOLUMES;
-       else if (_g_program_is_available ("unrar", check_command))
+       else if (_g_program_is_available ("unrar", check_command) && 
!unrar_is_suse_wrapper ())
                capabilities |= FR_ARCHIVE_CAN_READ;
 
        /* multi-volumes are read-only */
++++++ file-roller-rar-file-date.patch ++++++
>From f1e74492e765a3e055e0bed61cc5b2b930de12ad Mon Sep 17 00:00:00 2001
From: Paolo Bacchilega <pao...@src.gnome.org>
Date: Sun, 19 Nov 2017 16:49:32 +0100
Subject: [PATCH] rar archives: wrong file date when using rar 5.30 or higher

adapt to the new format

[bug #758121]
---
 src/fr-command-rar.c | 78 +++++++++++++++++++++++++++++++++++++++++++++-------
 src/fr-command-rar.h |  1 +
 2 files changed, 69 insertions(+), 10 deletions(-)

diff --git a/src/fr-command-rar.c b/src/fr-command-rar.c
index adfc3daa..8f31f7a3 100644
--- a/src/fr-command-rar.c
+++ b/src/fr-command-rar.c
@@ -84,6 +84,61 @@ mktime_from_string (const char *date_s,
        return mktime (&tm);
 }
 
+
+static time_t
+mktime_from_string_rar_5_30 (const char *date_s,
+                            const char *time_s)
+{
+       struct tm   tm = {0, };
+       char      **fields;
+
+       tm.tm_isdst = -1;
+
+       /* date */
+
+       fields = g_strsplit (date_s, "-", 3);
+       if (fields[0] != NULL) {
+               tm.tm_year = atoi (fields[0]) - 1900;
+               if (fields[1] != NULL) {
+                       tm.tm_mon = atoi (fields[1]) - 1;
+                       if (fields[2] != NULL)
+                               tm.tm_mday = atoi (fields[2]);
+               }
+       }
+       g_strfreev (fields);
+
+       /* time */
+
+       fields = g_strsplit (time_s, ":", 2);
+       if (fields[0] != NULL) {
+               tm.tm_hour = atoi (fields[0]);
+               if (fields[1] != NULL)
+                       tm.tm_min = atoi (fields[1]);
+       }
+       g_strfreev (fields);
+
+       return mktime (&tm);
+}
+
+
+/*
+ * Sample rar 5.30 or higher output:
+ *
+
+RAR 5.30   Copyright (c) 1993-2017 Alexander Roshal   11 Aug 2017
+Trial version             Type 'rar -?' for help
+
+Archive: test.rar
+Details: RAR 5
+
+ Attributes      Size    Packed Ratio    Date    Time   Checksum  Name
+----------- ---------  -------- ----- ---------- -----  --------  ----
+ -rw-r--r--        51        47  92%  2017-11-19 16:20  80179DAB  
loremipsum.txt
+----------- ---------  -------- ----- ---------- -----  --------  ----
+                   51        47  92%                              1
+
+ */
+
 /* Sample rar-5 listing output:
 
 RAR 5.00 beta 8   Copyright (c) 1993-2013 Alexander Roshal   22 Aug 2013
@@ -187,15 +242,17 @@ process_line (char     *line,
        g_return_if_fail (line != NULL);
 
        if (! rar_comm->list_started) {
-               if (strncmp (line, "RAR ", 4) == 0) {
-                       int version;
-                       sscanf (line, "RAR %d.", &version);
-                       rar_comm->rar5 = (version >= 5);
-               }
-               else if (strncmp (line, "UNRAR ", 6) == 0) {
-                       int version;
-                       sscanf (line, "UNRAR %d.", &version);
-                       rar_comm->rar5 = (version >= 5);
+               if ((strncmp (line, "RAR ", 4) == 0) || (strncmp (line, "UNRAR 
", 6) == 0)) {
+                       int major_version;
+                       int minor_version;
+
+                       if (strncmp (line, "RAR ", 4) == 0)
+                               sscanf (line, "RAR %d.%d", &major_version, 
&minor_version);
+                       else
+                               sscanf (line, "UNRAR %d.%d", &major_version, 
&minor_version);
+
+                       rar_comm->rar5 = (major_version >= 5);
+                       rar_comm->rar5_30 = ((major_version == 5) && 
(minor_version >= 30)) || (major_version >= 6);
                }
                else if (strncmp (line, "--------", 8) == 0) {
                        rar_comm->list_started = TRUE;
@@ -259,7 +316,8 @@ process_line (char     *line,
                        }
                        else {
                                fdata->size = g_ascii_strtoull (size_field, 
NULL, 10);
-                               fdata->modified = mktime_from_string 
(date_field, time_field);
+
+                               fdata->modified = rar_comm->rar5_30 ? 
mktime_from_string_rar_5_30 (date_field, time_field) : mktime_from_string 
(date_field, time_field);
 
                                if (attr_field_is_dir (attr_field, rar_comm)) {
                                        char *tmp;
diff --git a/src/fr-command-rar.h b/src/fr-command-rar.h
index 09ed2709..2a6e671d 100644
--- a/src/fr-command-rar.h
+++ b/src/fr-command-rar.h
@@ -44,6 +44,7 @@ struct _FrCommandRar
        gboolean  list_started;
        gboolean  rar4_odd_line;
        gboolean  rar5;
+       gboolean  rar5_30;
        FileData *fdata;
 };
 
-- 
2.15.0

++++++ file-roller-unar-dir-critical.patch ++++++
>From fe422f7c6b42a0d618b2b49999cfb2210f9ceca5 Mon Sep 17 00:00:00 2001
From: Mike Gorse <mgo...@suse.com>
Date: Mon, 11 Dec 2017 21:34:40 -0600
Subject: [PATCH] unarchiver: check that XADFileSize is set before reading it

Lsar does not set XADFileSize for directories, so we would output a
critical when encountering one.

https://bugzilla.gnome.org/show_bug.cgi?id=791505
---
 src/fr-command-unarchiver.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/fr-command-unarchiver.c b/src/fr-command-unarchiver.c
index a7cdb834..5e8fd705 100644
--- a/src/fr-command-unarchiver.c
+++ b/src/fr-command-unarchiver.c
@@ -91,7 +91,8 @@ list_command_completed (gpointer data)
 
                                entry = json_array_get_object_element (content, 
i);
                                fdata = file_data_new ();
-                               fdata->size = json_object_get_int_member 
(entry, "XADFileSize");
+                               if (json_object_has_member (entry, 
"XADFileSize"))
+                                       fdata->size = 
json_object_get_int_member (entry, "XADFileSize");
                                fdata->modified = mktime_from_string 
(json_object_get_string_member (entry, "XADLastModificationDate"));
                                if (json_object_has_member (entry, 
"XADIsEncrypted"))
                                        fdata->encrypted = 
json_object_get_int_member (entry, "XADIsEncrypted") == 1;
-- 
2.15.0


Reply via email to