Package: surf
Version: 2.0+git20201107-2
Severity: grave
Tags: upstream
Justification: renders package unusable

Dear Maintainer,

surf does not start anymore since version 2.0+git20201107.

Expected behaviour : surf should start.

Steps to reproduce :

$ /usr/bin/surf

output :

(WebKitWebProcess:94294): GLib-CRITICAL **: 02:49:52.728: the GVariant format 
string '(ii)' has a type of '(ii)' but the given value has a type of 'i'

(WebKitWebProcess:94294): GLib-CRITICAL **: 02:49:52.728: g_variant_get: 
assertion 'valid_format_string (format_string, TRUE, value)' failed

(WebKitWebProcess:94294): GLib-CRITICAL **: 02:49:52.729: the GVariant format 
string '(ii)' has a type of '(ii)' but the given value has a type of 'i'

(WebKitWebProcess:94294): GLib-CRITICAL **: 02:49:52.729: g_variant_get: 
assertion 'valid_format_string (format_string, TRUE, value)' failed
web process terminated: crashed

And surf crashes.

The problem can be traced back to this specific upstream commit : 
e92fd1aa5f38c399f8fc5d263026fbd9d34ddfbb

Which can be found at 
https://git.suckless.org/surf/commit/e92fd1aa5f38c399f8fc5d263026fbd9d34ddfbb.html

One possible fix/workaround is the following :

diff --git a/surf.c b/surf.c
index ac832ff..e84a538 100644
--- a/surf.c
+++ b/surf.c
@@ -1269,7 +1269,7 @@ initwebextensions(WebKitWebContext *wc, Client *c)
        if (spair[1] < 0)
                return;
 
-       gv = g_variant_new("i", spair[1]);
+       gv = g_variant_new("(ii)", spair[1]);
 
        webkit_web_context_set_web_extensions_initialization_user_data(wc, gv);
        webkit_web_context_set_web_extensions_directory(wc, WEBEXTDIR);
diff --git a/webext-surf.c b/webext-surf.c
index d087219..da16ddf 100644
--- a/webext-surf.c
+++ b/webext-surf.c
@@ -95,7 +95,7 @@ 
webkit_web_extension_initialize_with_user_data(WebKitWebExtension *e,
 
        webext = e;
 
-       g_variant_get(gv, "i", &sock);
+       g_variant_get(gv, "(ii)", &sock);
 
        gchansock = g_io_channel_unix_new(sock);
        g_io_channel_set_encoding(gchansock, NULL, NULL);

But this workaround seems wrong when we look at the semantic of g_variant_new() 
in
gvariant.c :
- sock and spair[1] are ints, and should work with "i".
- Similarly, "(ii)" should mean two extra arguments after the format, but only 
&sock works.

And I don't know whether this fix breaks surf in another way.

One other way would be to revert to 2.0+git20181009-4, or some other version 
inbetween.

Thank you in advance for your time,

Aymeric Agon-Rambosson


-- System Information:
Debian Release: bullseye/sid
  APT prefers testing-security
  APT policy: (500, 'testing-security'), (500, 'testing'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 5.10.0-6-amd64 (SMP w/16 CPU threads)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages surf depends on:
ii  libc6                        2.31-11
ii  libgcr-base-3-1              3.38.1-2
ii  libgcr-ui-3-1                3.38.1-2
ii  libglib2.0-0                 2.66.8-1
ii  libgtk-3-0                   3.24.24-3
ii  libjavascriptcoregtk-4.0-18  2.30.6-1
ii  libwebkit2gtk-4.0-37         2.30.6-1
ii  libx11-6                     2:1.7.0-2

Versions of packages surf recommends:
ii  curl                          7.74.0-1.2
ii  stterm [x-terminal-emulator]  0.8.4-1
ii  suckless-tools                46-1
ii  x11-utils                     7.7+5

Versions of packages surf suggests:
ii  apparmor  2.13.6-10

-- Configuration Files:
/etc/apparmor.d/usr.bin.surf changed:
/usr/bin/surf flags=(complain) {
  #include <abstractions/X>
  #include <abstractions/audio>
  #include <abstractions/base>
  #include <abstractions/enchant>
  #include <abstractions/dconf>
  #include <abstractions/fonts>
  #include <abstractions/freedesktop.org>
  #include <abstractions/gnome>
  #include <abstractions/mesa>
  #include <abstractions/nameservice>
  #include <abstractions/ssl_certs>
  #include <abstractions/surf-gstreamer>
  #include <abstractions/video>
  owner @{HOME}/.surf/ w,
  owner @{HOME}/.surf/** rwkl,
  owner @{HOME}/.cache/ rw,
  @{PROC}/@{pid}/cmdline r,
  @{PROC}/@{pid}/fd/ r,
  @{PROC}/@{pid}/smaps r,
  /dev/ r,
  /sys/devices/pci[0-9]*/** r,
  /sys/devices/platform/soc/soc:gpu/* r,
  /usr/share/glib-2.0/schemas/gschemas.compiled r,
  /usr/share/doc/** r,
  # WebKit
  /usr/lib/@{multiarch}/webkit2gtk-4.0/WebKit*Process ix,
  /{dev,run}/shm/WK2SharedMemory.* rw,
  /var/tmp/WebKit-Media-* rw,
  /usr/share/publicsuffix/public_suffix_list.{dat,dafsa} r,
  owner @{HOME}/.local/share/webkitgtk/ w,
  owner @{HOME}/.local/share/webkitgtk/** rw,
  owner @{HOME}/.cache/webkitgtk/ w,
  owner @{HOME}/.cache/webkitgtk/** rwk,
  # fontconfig
  /usr/share/fontconfig/conf.avail/ r,
  # dconf
  owner @{HOME}/.cache/dconf/user rw,
  owner /run/user/*/dconf/user rw,
  /usr/bin/surf ix,
  /{usr/,}bin/dash ix,
  /{usr/,}bin/sed ix,
  /usr/bin/dmenu ix,
  /usr/bin/printf ix,
  /usr/bin/xargs ix,
  /usr/bin/xprop ix,
  # for downloading files
  /dev/ptmx rw,
  /dev/pts/* rw,
  /usr/bin/st ix,
  # unconfined because it is called in (and downloading to) the cwd
  /usr/bin/curl Ux,
  # Site-specific additions and overrides. See local/README for details.
  #include <local/usr.bin.surf>
}


-- no debconf information

Reply via email to