Bug#934916: libss7: FTBFS on x32 (time_t sprintf format mismatch)

Laurence Parry greenreaper at gmail.com
Fri Aug 16 15:46:07 BST 2019


Package: libss7-2.0
Version: 2.0.0-2
Tags: ftbfs
Usertags: x32
Priority: minor

libss7 2.0 fails to build on x32 because it assumes time_t is of type
long int when it can be long long int (64-bit, on a system with a
32-bit long).

gcc -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=.
-specs=/usr/share/dpkg/pie-compile.specs -fstack-protector-strong
-Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g
-Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -fPIC -O2  -MD
-MT ss7.o -MF .ss7.o.d -MP -c -o ss7.o ss7.c
ss7.c: In function 'ss7_show_linkset':
ss7.c:654:21: error: format '%li' expects argument of type 'long int',
but argument 3 has type 'long long int' [-Werror=format=]
      sprintf(p, "(%lis)%c",
ss7->ss7_sched[ss7->links[i]->mtp3_timer[x]].when.tv_sec - time(NULL),
                   ~~^
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                   %lli

A patch for this might go along the lines of:

+#if defined __x86_64__ && defined __ILP32__
+      sprintf(p, "(%llis)%c",
ss7->ss7_sched[ss7->links[i]->mtp3_timer[x]].when.tv_sec - time(NULL),
+#else
      sprintf(p, "(%lis)%c",
ss7->ss7_sched[ss7->links[i]->mtp3_timer[x]].when.tv_sec - time(NULL),
+#endif

or it might be more appropriate to use strftime(), or cast to long
long int unconditionally (though this pulls it in where not needed on
x86 32-bit).

Minor priority because it's only mentioned as an binary dependency for
asterisk-dahdi (which currently compiles without it), and there it
only:

  * Depend on libss7 and newer libpri (1.4.7) for latest chan_dahdi abilities.

Best regards,
-- 
Laurence "GreenReaper" Parry
https://www.greenreaper.co.uk/



More information about the Pkg-voip-maintainers mailing list