Package: rplay
Version: 3.3.2-14
Usertags: goto-cc

During a rebuild of all Debian packages in a clean sid chroot (using cowbuilder
and pbuilder) the build failed with the following error. Please note that we
use our research compiler tool-chain (using tools from the cbmc package), which
permits extended reporting on type inconsistencies at link time.

[...]
gcc -o devrplay.so.3 devrplay.o  -Wl,-soname -Wl,devrplay.so.3 -shared   
-L../librplay -lrplay -ldl

error: conflicting function declarations "inet_addr"
old definition in module rplay file /usr/include/arpa/inet.h line 34
unsigned int (const char *)
new definition in module rptp file rptp.c line 67
unsigned long int (char *)
Makefile:28: recipe for target 'devrplay.so.3' failed
make[2]: *** [devrplay.so.3] Error 64
make[2]: Leaving directory 
'/srv/jenkins-slave/workspace/sid-goto-cc-rplay/rplay-3.3.2/devrplay'
Makefile:12: recipe for target 'all' failed
make[1]: *** [all] Error 2

Declaring library functions rather than using appropriate header files, like
here

http://sources.debian.net/src/rplay/3.3.2-14/librplay/rptp.c?hl=67#L67
http://sources.debian.net/src/rplay/3.3.2-14/rplayd/rplayd.h?hl=140#L140

in general isn't a great idea. (The code should be checked for further
occurrences of inet_addr/inet_ntoa.)

What's worse, however, is when those declarations do not match the system's
ones. In this case, for all systems with sizeof(unsigned int)<sizeof(unsigned
long int) there will be undefined behaviour as several bytes will take an
arbitrary value. On big endian systems also the selection of bytes will be
entirely wrong.

Best,
Michael

Attachment: pgpbgZY7_ndBu.pgp
Description: PGP signature

Reply via email to