Bug 2176510

Summary: createrepo_c: symbol lookup error: /lib64/libcreaterepo_c.so.0: undefined symbol: g_string_free_and_steal
Product: [Fedora] Fedora Reporter: Ondrej Mosnáček <omosnacek>
Component: createrepo_cAssignee: rpm-software-management
Status: NEW --- QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 39CC: daniel.mach, jmracek, jrohel, mblaha, pkratoch, ppisar, rpm-software-management, tmlcoch
Target Milestone: ---Keywords: Triaged
Target Release: ---   
Hardware: Unspecified   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Ondrej Mosnáček 2023-03-08 14:30:14 UTC
Description of problem:
Running createrepo_c on Fedora Rawhide fails with $SUMMARY.

Version-Release number of selected component (if applicable):
createrepo_c-0.20.1-4.fc39.x86_64
glib2-2.74.1-3.fc38.x86_64

How reproducible:
Always.

Steps to Reproduce:
1. createrepo_c --help

Actual results:
createrepo_c: symbol lookup error: /lib64/libcreaterepo_c.so.0: undefined symbol: g_string_free_and_steal

Expected results:
No error.

Additional info:
Updating glib to 2.75.4-2.fc39 fixes the issue, but the createrepo_c-0.20.1-4.fc39 RPM doesn't require that version. I suspect the problem may actually be in glib2, as it probably shouldn't add a new symbol without either bumping soname or using symbol versioning.

Comment 1 Petr Pisar 2023-03-13 14:08:12 UTC
The missing symbol is used by libcreaterepo_c.so.0 library from createrepo_c-libs-0.20.1-4.fc39.x86_64:

# nm -D /usr/lib64/libcreaterepo_c.so.0 | grep g_string_free_and_steal
                 U g_string_free_and_steal

and the symbol is provides by libglib-2.0.so.0 library from glib2-2.76.0-1.fc39.x86_64:

# nm -D /usr/lib64/libglib-2.0.so.0 | grep g_string_free_and_steal
000000000007fa70 T g_string_free_and_steal

createrepo_c-libs package should constrain a minimal glib2 version to the one which first provided it.

Comment 2 Petr Pisar 2023-03-13 15:24:24 UTC
From glib-2.75.3 NEWS:

* Add `g_string_free_and_steal()` and use it to warn on unused results from
  `g_string_free (_, FALSE)` (!3219, !3226, work by Matthias Clasen and Sergey Bugaev)

from glib/gstring.h:

#define g_string_free(str, free_segment)        \
  (__builtin_constant_p (free_segment) ?        \
    ((free_segment) ?                           \
      (g_string_free) ((str), (free_segment)) : \
      g_string_free_and_steal (str))            \
    :                                           \
    (g_string_free) ((str), (free_segment)))

The best fix would be glib2 to symbol-version new symbols so that rpm-build automatically picks the dependency. However, because glib2 does not use symbol versioning, I recommend fix it on createrepo_c by adding "Requires: glib2 >= 2.75.3" (if compiled against glib2 > 2.75.3).

Comment 3 Fedora Release Engineering 2023-08-16 08:08:52 UTC
This bug appears to have been reported against 'rawhide' during the Fedora Linux 39 development cycle.
Changing version to 39.