Bug#750428: linphone: Inconsistent definition of ORTP_INET6 to cause conflicting types

Michael Tautschnig mt at debian.org
Tue Jun 3 11:04:50 UTC 2014


Package: linphone
Version: 3.6.1-2.3
Severity: minor
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.

[...]
  CCLD     linphonec

linphonec-commands.o: In function `lpc_cmd_speak':
/srv/jenkins-slave/workspace/sid-goto-cc-linphone/linphone-3.6.1/console/commands.c:2113: warning: the use of `tempnam' is dangerous, better use `mkstemp'

error: conflicting function declarations "linphone_core_get_current_call"
old definition in module commands file ../coreapi/linphonecore.h line 973
struct _LinphoneCall * (const struct _LinphoneCore *)
new definition in module linphonecore file linphonecore.c line 3337
struct _LinphoneCall * (struct _LinphoneCore *lc)

reason for conflict at (*#this[0]->vtable.call_state_changed)[1]->audiostream->ms.session->rtp in types listed below (struct/struct):
composite type component counts differ (48/50)
struct _RtpStream {
  signed int socket;
  unsigned int <padding>;
  struct _RtpTransport * tr;
  signed int sockfamily;
  signed int max_rq_size;
  signed int time_jump;
  unsigned int ts_jump;
  struct _queue rq;
  struct _queue tev_rq;
  struct msgb * cached_mp;
  signed int loc_port;
  struct sockaddr_in rem_addr;
  signed int rem_addrlen;
  void * QoSHandle;
  unsigned long int QoSFlowID;
  struct _JitterControl jittctl;
  unsigned int snd_time_offset;
  unsigned int snd_ts_offset;
  unsigned int snd_rand_offset;
  unsigned int snd_last_ts;
  unsigned int rcv_time_offset;
  unsigned int rcv_ts_offset;
  unsigned int rcv_query_ts_offset;
  unsigned int rcv_last_ts;
  unsigned int rcv_last_app_ts;
  unsigned int rcv_last_ret_ts;
  unsigned int hwrcv_extseq;
  unsigned int hwrcv_seq_at_last_SR;
  unsigned int hwrcv_since_last_SR;
  unsigned int last_rcv_SR_ts;
  struct timeval last_rcv_SR_time;
  unsigned short int snd_seq;
  unsigned short int <padding>;
  unsigned int last_rtcp_packet_count;
  unsigned int sent_payload_bytes;
  unsigned int sent_bytes;
  struct timeval send_bw_start;
  unsigned int recv_bytes;
  unsigned int <padding>;
  struct timeval recv_bw_start;
  struct rtp_stats stats;
  signed int recv_errno;
  signed int send_errno;
  signed int snd_socket_size;
  signed int rcv_socket_size;
  signed int ssrc_changed_thres;
  unsigned int <padding>;
  struct jitter_stats jitter_stats;
}
struct _RtpStream {
  signed int socket;
  unsigned int <padding>;
  struct _RtpTransport * tr;
  signed int sockfamily;
  signed int max_rq_size;
  signed int time_jump;
  unsigned int ts_jump;
  struct _queue rq;
  struct _queue tev_rq;
  struct msgb * cached_mp;
  signed int loc_port;
  unsigned int <padding>;
  struct sockaddr_storage rem_addr;
  signed int rem_addrlen;
  unsigned int <padding>;
  void * QoSHandle;
  unsigned long int QoSFlowID;
  struct _JitterControl jittctl;
  unsigned int snd_time_offset;
  unsigned int snd_ts_offset;
  unsigned int snd_rand_offset;
  unsigned int snd_last_ts;
  unsigned int rcv_time_offset;
  unsigned int rcv_ts_offset;
  unsigned int rcv_query_ts_offset;
  unsigned int rcv_last_ts;
  unsigned int rcv_last_app_ts;
  unsigned int rcv_last_ret_ts;
  unsigned int hwrcv_extseq;
  unsigned int hwrcv_seq_at_last_SR;
  unsigned int hwrcv_since_last_SR;
  unsigned int last_rcv_SR_ts;
  struct timeval last_rcv_SR_time;
  unsigned short int snd_seq;
  unsigned short int <padding>;
  unsigned int last_rtcp_packet_count;
  unsigned int sent_payload_bytes;
  unsigned int sent_bytes;
  struct timeval send_bw_start;
  unsigned int recv_bytes;
  unsigned int <padding>;
  struct timeval recv_bw_start;
  struct rtp_stats stats;
  signed int recv_errno;
  signed int send_errno;
  signed int snd_socket_size;
  signed int rcv_socket_size;
  signed int ssrc_changed_thres;
  unsigned int <padding>;
  struct jitter_stats jitter_stats;
}
Makefile:541: recipe for target 'linphonec' failed
make[3]: *** [linphonec] Error 64
make[3]: Leaving directory '/srv/jenkins-slave/workspace/sid-goto-cc-linphone/linphone-3.6.1/console'
Makefile:561: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/srv/jenkins-slave/workspace/sid-goto-cc-linphone/linphone-3.6.1'
Makefile:488: recipe for target 'all' failed
make[1]: *** [all] Error 2

The difference here lies in the type of the rem_addr member, with the full
declaration to be reviewed here:

http://sources.debian.net/src/linphone/3.6.1-2.3/oRTP/include/ortp/rtpsession.h?hl=116#L116

Note that this will affect the offsets of various further members, making the
two types inconsistent in several ways. Yet this might all be safe at present as
commands.c, at least on a quick review, does not appear to access any of the
members. As such it may be desirable to keep the structure private rather than
exposing it via the header file.

Best,
Michael

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 859 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-voip-maintainers/attachments/20140603/57eba10c/attachment.sig>


More information about the Pkg-voip-maintainers mailing list