Bug 32297

Summary: undefined symbol: gtk_widget_path_iter_set_object_name
Product: Sisyphus Reporter: Ivan Zakharyaschev <imz>
Component: firefoxAssignee: Alexey Gladkov <legion>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: major    
Priority: P3 CC: glebfm, lav, legion, rauty, sbolshakov, vostok
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 33085    

Description Ivan Zakharyaschev 2016-07-21 15:42:17 MSK
$ rpm -qf /usr/lib64/firefox/libxul.so 
firefox-47.0-alt1

I've installed firefox from Sisyphus (see below; in a system with no dist-upgrade for a long while), and it crashes like this:

-bash-4.3$ firefox &
[1] 988359
-bash-4.3$ XPCOMGlueLoad error for file /usr/lib64/firefox/libxul.so:
/usr/lib64/firefox/libxul.so: undefined symbol: gtk_widget_path_iter_set_object_name
Couldn't load XPCOM.

[1]+  Exit 255                firefox

The installation:

apt> install firefox
Unrequested changes are needed to execute this operation.
The following packages will be upgraded
  libnspr libnspr-devel libnss libnss-devel
The following NEW packages will be installed:
  browser-plugins-npapi firefox libvpx3 mozilla-common
4 upgraded, 4 newly installed, 0 removed and 0 kept.
Will need more 37,3MB of archives.
After unpacking will need more 104MB of disk space.
Do you want to continue? [Y/n] 
apt> commit 
The following packages will be upgraded
  libnspr libnspr-devel libnss libnss-devel
The following NEW packages will be installed:
  browser-plugins-npapi firefox libvpx3 mozilla-common
4 upgraded, 4 newly installed, 0 removed and 652 not upgraded.
Need to get 0B/37,3MB of archives.
After unpacking 104MB of additional disk space will be used.
Do you want to continue? [Y/n] 
Committing changes...

Its deps:

-bash-4.3# rpm -q firefox --requires | fgrep -i gtk
libgtk-3.so.0()(64bit) >= set:qmXE0Z41sUD51fHlZ0dBzsxzHbvluPe
libgtk-x11-2.0.so.0()(64bit)  
-bash-4.3# rpm -qa | fgrep -i gtk
python3-module-matplotlib-gtk3-1.5.0-alt4.git20150829.1
gtk-builder-convert-2.24.29-alt1
libwebkit2gtk-2.10.7-alt2
libcolord-gtk-0.1.25-alt2
libgtk+3-devel-3.18.8-alt2
libcanberra-gtk3-devel-0.30-alt2
libnm-gtk-devel-1.1.91-alt1
libjavascriptcoregtk4-2.10.7-alt2
gtk-doc-1.24-alt1
python-module-pygtk-2.24.0-alt6
libgtk+3-3.18.8-alt2
libclutter-gtk3-1.6.6-alt1
libgtkglext-1.2.0-alt2.4
libgtk+2-devel-2.24.29-alt1
emacs24-X11-gtk3-24.5-alt16
gtk-update-icon-cache-2.24.29-alt1
libgtk+2-2.24.29-alt1
libnm-gtk-1.1.91-alt1
libcanberra-gtk3-0.30-alt2
python-module-pygtk-libglade-2.24.0-alt6
libgtk+3-gir-devel-3.18.8-alt2
libgtk+2-locales-2.24.29-alt1
libgtk+3-gir-3.18.8-alt2
libcanberra-gtk-common-devel-0.30-alt2
-bash-4.3#
Comment 1 Ivan Zakharyaschev 2016-07-21 15:43:22 MSK
Why hasn't this problem with symbols been caught by set-versions, I wonder?
Comment 2 Alexey Gladkov 2016-07-21 17:02:19 MSK
Because I believe that it's a local miss-configuration.
Comment 3 Ivan Zakharyaschev 2016-07-21 17:31:06 MSK
There must have been no special local configuration, only some old (and some new) packages installed and not touched.

This healed the problem:

apt> install libgtk+3
Unrequested changes are needed to execute this operation.
The following packages will be upgraded
  libgtk+3 libgtk+3-devel libgtk+3-gir libgtk+3-gir-devel
The following NEW packages will be installed:
  gtk+3-themes-incompatible
4 upgraded, 1 newly installed, 0 removed and 0 kept.
Will need more 6868kB of archives.
After unpacking will need more 192kB of disk space.
Do you want to continue? [Y/n] 
apt> commit 
The following packages will be upgraded
  libgtk+3 libgtk+3-devel libgtk+3-gir libgtk+3-gir-devel
The following NEW packages will be installed:
  gtk+3-themes-incompatible
4 upgraded, 1 newly installed, 0 removed and 648 not upgraded.
Need to get 0B/6868kB of archives.
After unpacking 192kB of additional disk space will be used.
Do you want to continue? [Y/n] 
Committing changes...

The new firefox package does not work with some a bit old libgtk+3 packages...

Now I can try to reproduce this by reverting back to the old gtk+3 packages...
Comment 4 Anatoly Lyutin 2016-07-26 17:11:31 MSK
100% не работает на:
[root@localhost ~]# rpm -qa | grep libgtk+3
libgtk+3-gir-3.10.4-alt1
libgtk+3-3.10.4-alt1


При обновлении с FF 44 на FF 47 всё прошло без предупреждений. Соответственно никакие set-version не помогли в данном случае.
Comment 5 Ivan Zakharyaschev 2016-07-26 17:17:39 MSK
(In reply to comment #4)
> 100% не работает на:
> [root@localhost ~]# rpm -qa | grep libgtk+3
> libgtk+3-gir-3.10.4-alt1
> libgtk+3-3.10.4-alt1

У меня случай был даже на более свежей версии:

libgtk+3-3.18.8-alt2 (мог бы повторить, вернув те версии, но пока руки не дошли)

> При обновлении с FF 44 на FF 47 всё прошло без предупреждений. Соответственно
> никакие set-version не помогли в данном случае.
Comment 6 Anatoly Lyutin 2016-07-26 18:40:14 MSK
Может, кому интересно, но всё сломалось с 45-ой версии FF. Проверил 47, 46, 45, работает только 44.
Comment 7 Ivan Zakharyaschev 2016-12-06 17:10:22 MSK
Please approve task 174017 with 50.0.2-alt2 which is supposed to improve this:

- Precise calculation of the dependency on libgtk symbols (ALT#32297)
  (and strict verification of unresolved symbols) (Thx ruslandh@'s
  work on strict unresolved symbols verification in palemoon.)

$ git --no-pager diff HEAD^^..HEAD^
diff --git a/firefox.spec b/firefox.spec
index 2b2b63a..33a5286 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -178,6 +178,13 @@ MOZ_OPT_FLAGS=$(echo $RPM_OPT_FLAGS -fPIC -Wl,-z,relro -Wl,-z,now | \
 )
 export CFLAGS="$MOZ_OPT_FLAGS"
 export CXXFLAGS="$MOZ_OPT_FLAGS"
+# Add fake RPATH
+rpath="/$(printf %%s '%firefox_prefix' |tr '[:print:]' '_')"
+export LDFLAGS="$LDFLAGS -Wl,-rpath,$rpath"
+%if_without system_nss
+# see mozilla/security/nss/coreconf/Linux.mk:203
+export RPATH="-Wl,-rpath,$rpath"
+%endif
 
 export PREFIX="%_prefix"
 export LIBDIR="%_libdir"
@@ -227,6 +234,20 @@ make -C objdir \
 	libdir=%_libdir \
 	install
 
+# Add real RPATH
+rpath="/$(printf %%s '%firefox_prefix' |tr '[:print:]' '_')"
+find %buildroot/%firefox_prefix -type f -print0 |
+while read -r -d '' f; do
+      t="$(readlink -ev "$f")"
+
+      file -- "$t" | fgrep -qs ELF || continue
+
+      if chrpath -l "$t" | fgrep -qs "PATH=$rpath"; then
+         chrpath -r "%firefox_prefix" "$t"
+      fi
+done
+%set_verify_elf_method unresolved=strict
+
 # install altlinux-specific configuration
 install -D -m 644 %SOURCE8 %buildroot/%firefox_prefix/browser/defaults/preferences/all-altlinux.js
 


Here is how the dependency has got more precise:

$ compare_packages -a --requires -- /ALT/Sisyphus/x86_64/RPMS.classic/firefox-50.0.2-alt1.x86_64.rpm -- ~/hasher/repo/x86_64/RPMS.hasher/firefox-50.0.2-alt1.x86_64.rpm
--- /tmp/.private/imz/compare_packages.vskrgWZ4TP/1     2016-12-06 16:04:40.822816774 +0300
+++ /tmp/.private/imz/compare_packages.vskrgWZ4TP/2     2016-12-06 16:04:40.828816734 +0300
@@ -40,13 +40,13 @@
 libgcc_s.so.1(GCC_3.3)(64bit)  
 libgcc_s.so.1(GCC_3.4)(64bit)  
 libgcc_s.so.1(GCC_4.0.0)(64bit)  
-libgdk-3.so.0()(64bit) >= set:nmGow1
+libgdk-3.so.0()(64bit) >= set:nf8PwA630VTRhMdY3UJZBMuUg9O34uwlzC05KjJ1gV3TtA4HGdDFmlfExmT6Ciu9u5dtOxCshkFgXDYKEeLCS1r6eFRDvtH96efY2g5diNR4CtasVgLfwofNg1sOFh6UaZpkX3r8IQKg9byOITslz2lJDN2EJ5nOFIRfZJH0mZ1PvzbMF3Ry6r3kreg18DOkGQZ0zrCtgI4D1EdPX1VRrXswG0kZh8eLPRj7KOxhneF3ZHZfaMT4CsExWT1CyRaIZrw7Av2FJamrJmx3vYZJojRVY1d5VY7UnGCF5c8Owi7thdjP1qMl4tQwUfUC9QNjSql3kEOi3iZio09
 libgdk-x11-2.0.so.0()(64bit)  
 libgdk_pixbuf-2.0.so.0()(64bit) >= set:lgnLZlVCS16t3jD6kNOWSYPWoC0jFaIF01CiqLB0NNj3KxDHGO0
 libgio-2.0.so.0()(64bit) >= set:oiDURQYOLc5K71lMwpVLAlDhA7vgZjpwx77Sf6zF9yCfv9HXMwM9qdWkXc5rluxpQXxINV0CAh8swg8RHBTPqCxBCvJ2ZiavhqzTgVRQgaD2H59HBZ5Cn464mzpemSRN3EtzHhIJ8pTZh
 libglib-2.0.so.0()(64bit) >= set:oh6Jjraz6mRpYgJhENEZCSs2NkDeJdFr4Wa8Oz6BF4wVOXj2QYgBou4uHoj3fGTr4fGrIp0wRwJpXsu2DjdL7kROyid1KkT9c8fm5vtUPhzgpLPIZsRRy99JpFicmQNzdv8X4og4xANTyWj1wF002cCeo5bIVVtWAMRehKfuRw3cE0pjRafcFtpIM3dqcCWm1cdjKj0l6KEjS7Ri8OwM82eqDhW8jdMRwW5UJIeOWHnU5bcqxeA0rPoth6HJ7pdzS9YZawAsG070
 libgobject-2.0.so.0()(64bit) >= set:mgX8o2bTFZgxZIrkD3XdTLPQ7S0pdELQmxkcixFDsIjy5VUnc1bPlrvMBnjM3AUKPc9ZemnHFYgxDYkXaVGk0UorlzJ69RlI6liYx05jvSnRFhWh7R4s5Zjtc7OKUZ50AiIRD6Lyiy1
-libgtk-3.so.0()(64bit)  
+libgtk-3.so.0()(64bit) >= set:qhjBFRzhmUSA1JxGt4I2Nu1PRErHmMyJX53SZdWswanXfXeVMJxJxXHXKh11IUamZw73rKzUVJwOGwo7lbZI18ZFZDXIpuI2ZEButQfZbFTPZxvQ3GmVXbxRx4hlA8rgfEs5bb2KZi3o3cgMkjiyE2aZgeLcGBChfKduoai1oU5sL3qHXEBUH88dR1Q9VySDgBGgJP2WOAMv8BWamIH0amrTDpRhTb7zHshCX6VCPZgkfZJh0dnhwb3p53ZehVLIYThYJGT2lYzhovSN2aeVIFJ6uqaZ5JT8hybB0w2jQhXtzB7mk3EYyY7tWySNFnxhnDno57pxsrUrmtewRfLtAemkz9fUahNFlKen6Bp72CEWlZbZze4Ztzr0OvZr9HZixS02DmY7hR3g7HC3poTeevAYLq6HyyJvI3cpdm56S5wuGZGrQoeIJL2sJKI0KrWJXJrH4Z6E6uAPycKsTmuKXGIsvhBhbjoWZ8x3arePOYVnnrq8LH0mmEINx2eO9KeEdjRkkmzZksp6W7XdvL4iWbvCTOgu5bdZpJVDg1ymC2ldyBuiITLD0myATuGKCkDIXVM9hSBZGZGJiqjIrBGPIKqGp5Gais0YSNBULOMx7wTW2cBNqiHg7CRSuZ0bH2sp2JmvGJZrUhurZzeuge3xil9TsjAgw8kfIl9cn4PtVe3eZyd3N9y79yv7vVifSAUk9R9q7R39otPWibncoZt1ngtgCgKJtbg5y9qdIpLIx7a8ZGJKZ0H7izflqHPa5VkhgZa2XNN8x59cUT8hZzUN1F2joZj3Z6ZG1kLc2DSwoRnLkDCAxNWMqSiRWFeRabvt4wkdch6PgCfMbFC1p2J5IRcn8L7JziSupINI3YZuPGeKn5WrXxZ33sG2D9ZvZnMZgIHevng7bedVFA2h0n9OqPnPlEPpVcXENuIPQIIWdCGOC6TG1SSow56qGNzn2eRlQ1ATemtZaNgMef6D8s5uCCXm8GhgZpMpvK0TAeWau2GEcR3bPoYsF379RZEVuOGcc3kdGXT650Es6rup1lhS8mBKBUdNS7HxOHf9avoKrAKv9ctOWGj3aOoXoONCE7VBon7kGZmZzZ8AYelSc3RBjojAECfGjvGUo5HaCDor1ZlfZK6BeUVeo7o7
 libgtk-x11-2.0.so.0()(64bit)  
 libhunspell.so.2()(64bit) >= set:mjmZjpxYkULYRK3Um
 libicui18n.so.56()(64bit) >= set:qkokXiK7jdxxZ3g6ZC26MhNAiZlbc0GH3Zt007SncGdmdDLYcgUM7yVnpwcq0T3oRQp8AQYoASlVcgO9OZ96n7Z4wZrUI30Z7jM5bQGbmNhXgm8qNg9TYqUu1
Comment 8 Repository Robot 2016-12-08 19:28:28 MSK
firefox-50.0.2-alt2 -> sisyphus:

* Tue Dec 06 2016 Ivan Zakharyaschev <imz@altlinux> 50.0.2-alt2
- Precise calculation of the dependency on libgtk symbols (ALT#32297) and
  strict verification of unresolved symbols. (Thx legion@ for the original
  hack, which had to be removed in 44.0.2-alt3, but found to be restorable
  by ruslandh@'s work on strict unresolved symbols verification in palemoon.)