UPDATE: net/libshout (please disregard previously sent patches)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

UPDATE: net/libshout (please disregard previously sent patches)

Moritz Grimm
Hi,


the attached patch updates libshout to version 2.2; changes are listed
in the patch itself.

2.2 is very close to what I tested for a very long time on i386 with
aggressive MALLOC_OPTIONS, and another extensive test with ices and
ices2 shows that it's still good on i386.

This breaks net/ices until it is adjusted (patch follows in a separate
mail.)


Moritz

* Update to libshout-2.2 (new: Speex support and bugfixes)
* Enable Theora support
* Use devel/pkgconfig now -- more consistent, but it'll break net/ices!
  (net/ices update comes next)
* PNF
* Patch maintenance
* Fix another double-free() that, unfortunately, didn't make it into 2.2
  in time

diff -pruN --exclude=CVS /usr/ports/net/libshout/Makefile ./Makefile
--- /usr/ports/net/libshout/Makefile Sun Jan  1 11:23:39 2006
+++ ./Makefile Fri Jan  6 14:32:04 2006
@@ -2,9 +2,8 @@
 
 COMMENT= "library for communicating with an icecast server"
 
-DISTNAME= libshout-2.1
-PKGNAME= ${DISTNAME}p2
-SHARED_LIBS= shout 4.0
+DISTNAME= libshout-2.2
+SHARED_LIBS= shout 5.0
 MODGNU_SHARED_LIBS= shout ''
 CATEGORIES= net audio
 
@@ -21,15 +20,17 @@ WANTLIB= m ogg
 
 MASTER_SITES= http://downloads.xiph.org/releases/libshout/
 
-LIB_DEPENDS= vorbis.4::audio/libvorbis
+BUILD_DEPENDS= ::devel/pkgconfig \
+ speex.4::audio/speex
+LIB_DEPENDS= vorbis.4::audio/libvorbis \
+ theora.1::multimedia/libtheora
 
-USE_LIBTOOL= Yes
+FAKE_FLAGS= docdir='${PREFIX}/share/examples/libshout'
+
 CONFIGURE_STYLE=gnu
-CONFIGURE_ARGS= ${CONFIGURE_SHARED} --disable-pkgconfig \
- --without-theora
+CONFIGURE_ARGS+=${CONFIGURE_SHARED}
 
 SEPARATE_BUILD= simple
-
-FAKE_FLAGS= docdir='${PREFIX}/share/examples/libshout'
+USE_LIBTOOL= Yes
 
 .include <bsd.port.mk>
diff -pruN --exclude=CVS /usr/ports/net/libshout/distinfo ./distinfo
--- /usr/ports/net/libshout/distinfo Sun Jan  1 11:23:39 2006
+++ ./distinfo Fri Jan  6 12:30:06 2006
@@ -1,4 +1,4 @@
-MD5 (libshout-2.1.tar.gz) = ca6e98af87fd17c709821d9be82b37d5
-RMD160 (libshout-2.1.tar.gz) = edcbf2c8111bd76ce27734513a4c483986ba2e7e
-SHA1 (libshout-2.1.tar.gz) = c251d0791d807762957235442fa9b777f3f6068c
-SIZE (libshout-2.1.tar.gz) = 455243
+MD5 (libshout-2.2.tar.gz) = d5b273a072785ee14a85ff76f66850aa
+RMD160 (libshout-2.2.tar.gz) = fb1697ce5e95a8e54168656d5a9a735cbb68c972
+SHA1 (libshout-2.2.tar.gz) = e059116226d05758192575db2965017f28424860
+SIZE (libshout-2.2.tar.gz) = 472875
diff -pruN --exclude=CVS /usr/ports/net/libshout/patches/patch-src_avl_avl_c ./patches/patch-src_avl_avl_c
--- /usr/ports/net/libshout/patches/patch-src_avl_avl_c Tue Apr 19 22:23:44 2005
+++ ./patches/patch-src_avl_avl_c Sat Dec 31 14:11:30 2005
@@ -1,6 +1,6 @@
 $OpenBSD: patch-src_avl_avl_c,v 1.4 2005/04/19 20:23:44 sturm Exp $
 --- src/avl/avl.c.orig Mon Jul  5 22:44:13 2004
-+++ src/avl/avl.c Tue Apr 19 22:18:54 2005
++++ src/avl/avl.c Sat Dec 31 14:11:23 2005
 @@ -35,6 +35,7 @@
 
  #include <stdio.h>
@@ -9,12 +9,14 @@ $OpenBSD: patch-src_avl_avl_c,v 1.4 2005
 
  #include "avl.h"
 
-@@ -1063,9 +1064,11 @@ typedef struct _link_node {
+@@ -1062,10 +1063,12 @@ typedef struct _link_node {
+
  static char balance_chars[3] = {'\\', '-', '/'};
 
- static int
+-static int
 -default_key_printer (char * buffer, void * key)
-+default_key_printer (char * buffer, size_t size, void * key)
++static unsigned int
++default_key_printer (char * buffer, unsigned int size, void * key)
  {
 -  return sprintf (buffer, "%p", key);
 +  snprintf (buffer, size, "%p", key);
@@ -23,13 +25,11 @@ $OpenBSD: patch-src_avl_avl_c,v 1.4 2005
  }  
 
  /*
-@@ -1108,8 +1111,8 @@ print_node (avl_key_printer_fun_type key
-         link_node * link)
+@@ -1109,7 +1112,7 @@ print_node (avl_key_printer_fun_type key
  {
    char buffer[256];
--  unsigned int width;
+   unsigned int width;
 -  width = key_printer (buffer, node->key);
-+  size_t width;
 +  width = key_printer (buffer, sizeof(buffer), node->key);
 
    if (node->right) {
diff -pruN --exclude=CVS /usr/ports/net/libshout/patches/patch-src_avl_avl_h ./patches/patch-src_avl_avl_h
--- /usr/ports/net/libshout/patches/patch-src_avl_avl_h Tue Apr 19 22:07:11 2005
+++ ./patches/patch-src_avl_avl_h Sat Dec 31 14:11:30 2005
@@ -1,12 +1,12 @@
 $OpenBSD: patch-src_avl_avl_h,v 1.1 2005/04/19 20:07:11 sturm Exp $
---- src/avl/avl.h.orig Sun Apr 17 02:44:39 2005
-+++ src/avl/avl.h Sun Apr 17 02:45:06 2005
+--- src/avl/avl.h.orig Mon Jul  5 22:44:13 2004
++++ src/avl/avl.h Sat Dec 31 14:10:34 2005
 @@ -55,7 +55,7 @@ typedef int (*avl_key_compare_fun_type)
  typedef int (*avl_iter_fun_type)    (void * key, void * iter_arg);
  typedef int (*avl_iter_index_fun_type)    (unsigned long index, void * key, void * iter_arg);
  typedef int (*avl_free_key_fun_type)    (void * key);
 -typedef int (*avl_key_printer_fun_type)    (char *, void *);
-+typedef int (*avl_key_printer_fun_type)    (char *, size_t, void *);
++typedef unsigned int (*avl_key_printer_fun_type)    (char *, unsigned int, void *);
 
  /*
   * <compare_fun> and <compare_arg> let us associate a particular compare
diff -pruN --exclude=CVS /usr/ports/net/libshout/patches/patch-src_shout_c ./patches/patch-src_shout_c
--- /usr/ports/net/libshout/patches/patch-src_shout_c Tue Apr 19 22:07:11 2005
+++ ./patches/patch-src_shout_c Fri Jan  6 12:31:10 2006
@@ -1,7 +1,36 @@
 $OpenBSD: patch-src_shout_c,v 1.1 2005/04/19 20:07:11 sturm Exp $
---- src/shout.c.orig Sun Apr 17 12:25:25 2005
-+++ src/shout.c Sun Apr 17 12:51:32 2005
-@@ -489,7 +489,7 @@ int shout_set_mount(shout_t *self, const
+--- src/shout.c.orig Tue Jan  3 19:56:39 2006
++++ src/shout.c Fri Jan  6 12:30:31 2006
+@@ -165,6 +165,8 @@ int shout_close(shout_t *self)
+ if (self->close)
+ self->close(self);
+
++ self->close = NULL;
++ self->send = NULL;
+ sock_close(self->socket);
+ self->state = SHOUT_STATE_UNCONNECTED;
+ self->starttime = 0;
+@@ -183,6 +185,9 @@ int shout_send(shout_t *self, const unsi
+ if (self->state != SHOUT_STATE_CONNECTED)
+ return self->error = SHOUTERR_UNCONNECTED;
+
++ if (self->send == NULL)
++ return self->error = SHOUTERR_NOCONNECT;
++
+ if (self->starttime <= 0)
+ self->starttime = timing_get_time();
+
+@@ -202,6 +207,9 @@ ssize_t shout_send_raw(shout_t *self, co
+ if (self->state != SHOUT_STATE_CONNECTED)
+ return SHOUTERR_UNCONNECTED;
+
++ if (self->send == NULL)
++ return self->error = SHOUTERR_NOCONNECT;
++
+ self->error = SHOUTERR_SUCCESS;
+
+ /* send immediately if possible (should be the common case) */
+@@ -489,7 +497,7 @@ int shout_set_mount(shout_t *self, const
  if (!(self->mount = malloc(len)))
  return self->error = SHOUTERR_MALLOC;
 
@@ -10,44 +39,30 @@ $OpenBSD: patch-src_shout_c,v 1.1 2005/0
 
  return self->error = SHOUTERR_SUCCESS;
  }
-@@ -1145,6 +1145,7 @@ static char *http_basic_authorization(sh
+@@ -1146,7 +1154,7 @@ static int create_http_request(shout_t *
+ static char *http_basic_authorization(shout_t *self)
  {
  char *out, *in;
- int len;
-+ int ret;
+- int len;
++ size_t len;
 
  if (!self || !self->user || !self->password)
  return NULL;
-@@ -1152,7 +1153,11 @@ static char *http_basic_authorization(sh
+@@ -1154,7 +1162,7 @@ static char *http_basic_authorization(sh
  len = strlen(self->user) + strlen(self->password) + 2;
  if (!(in = malloc(len)))
  return NULL;
 - sprintf(in, "%s:%s", self->user, self->password);
-+ ret = snprintf(in, len, "%s:%s", self->user, self->password);
-+ if (ret == -1 || ret >= len) {
-+ free(in);
-+ return NULL;
-+ }
++ snprintf(in, len, "%s:%s", self->user, self->password);
  out = _shout_util_base64_encode(in);
  free(in);
 
-@@ -1161,10 +1166,15 @@ static char *http_basic_authorization(sh
+@@ -1163,7 +1171,7 @@ static char *http_basic_authorization(sh
  free(out);
  return NULL;
  }
 - sprintf(in, "Authorization: Basic %s\r\n", out);
-- free(out);
--
-- return in;
-+ ret = snprintf(in, len, "Authorization: Basic %s\r\n", out);
-+ if (ret == -1 || ret >= len) {
-+ free(in);
-+ free(out);
-+ return NULL;
-+ } else {
-+ free(out);
-+ return in;
-+ }
- }
-
- static int parse_response(shout_t *self)
++ snprintf(in, len, "Authorization: Basic %s\r\n", out);
+ free(out);
+
+ return in;
diff -pruN --exclude=CVS /usr/ports/net/libshout/patches/patch-src_util_c ./patches/patch-src_util_c
--- /usr/ports/net/libshout/patches/patch-src_util_c Tue Aug 23 01:25:39 2005
+++ ./patches/patch-src_util_c Sat Dec 31 11:23:50 2005
@@ -1,6 +1,6 @@
 $OpenBSD: patch-src_util_c,v 1.2 2005/08/22 23:25:39 pvalchev Exp $
 --- src/util.c.orig Sun Mar 21 05:03:34 2004
-+++ src/util.c Fri Aug 19 21:04:04 2005
++++ src/util.c Sat Dec 31 11:23:42 2005
 @@ -254,6 +254,7 @@ char *_shout_util_dict_urlencode(util_di
  char *res, *tmp;
  char *enc;
@@ -9,25 +9,18 @@ $OpenBSD: patch-src_util_c,v 1.2 2005/08
 
  for (res = NULL; dict; dict = dict->next) {
  /* encode key */
-@@ -265,21 +266,39 @@ char *_shout_util_dict_urlencode(util_di
+@@ -265,21 +266,24 @@ char *_shout_util_dict_urlencode(util_di
  return NULL;
  }
  if (start) {
 - if (!(res = malloc(strlen(enc) + 1))) {
-+ int ret;
-+
 + buflen = strlen(enc) + 1;
 + if ((res = malloc(buflen)) == NULL) {
  free(enc);
  return NULL;
  }
 - sprintf(res, "%s", enc);
-+ ret = snprintf(res, buflen, "%s", enc);
-+ if (ret == -1 || ret >= buflen) {
-+ free(enc);
-+ free(res);
-+ return NULL;
-+ }
++ snprintf(res, buflen, "%s", enc);
  free(enc);
  start = 0;
  } else {
@@ -37,24 +30,15 @@ $OpenBSD: patch-src_util_c,v 1.2 2005/08
  free(enc);
  free(res);
  return NULL;
-- } else
-+ } else {
-+ int ret;
-+
+ } else
  res = tmp;
 - sprintf(res + strlen(res), "%c%s", delim, enc);
-+ ret = snprintf(res + strlen(res), buflen - strlen(res),
-+       "%c%s", delim, enc);
-+ if (ret == -1 || ret >= buflen - strlen(res)) {
-+ free(enc);
-+ free(res);
-+ return NULL;
-+ }
-+ }
++ snprintf(res + strlen(res), buflen - strlen(res),
++       "%c%s", delim, enc);
  free(enc);
  }
 
-@@ -291,14 +310,25 @@ char *_shout_util_dict_urlencode(util_di
+@@ -291,13 +295,14 @@ char *_shout_util_dict_urlencode(util_di
  return NULL;
  }
 
@@ -64,23 +48,10 @@ $OpenBSD: patch-src_util_c,v 1.2 2005/08
  free(enc);
  free(res);
  return NULL;
-- } else
-+ } else {
-+ int ret;
-+ size_t reslen;
+ } else
  res = tmp;
 - sprintf(res + strlen(res), "=%s", enc);
-- free(enc);
-+ reslen = strlen(res);
-+ ret = snprintf(res + reslen, buflen - reslen, "=%s", enc);
-+ if (ret == -1 || ret >= buflen - reslen) {
-+ free(enc);
-+ free(res);
-+ return NULL;
-+ }
-+ free(enc);
-+ enc = NULL;
-+ }
++ snprintf(res + strlen(res), buflen - strlen(res), "=%s", enc);
+ free(enc);
  }
 
- return res;
diff -pruN --exclude=CVS /usr/ports/net/libshout/pkg/PLIST ./pkg/PLIST
--- /usr/ports/net/libshout/pkg/PLIST Sun Feb 27 20:14:40 2005
+++ ./pkg/PLIST Fri Jan  6 12:56:01 2006
@@ -1,13 +1,15 @@
 @comment $OpenBSD: PLIST,v 1.4 2005/02/27 19:14:40 naddy Exp $
-bin/shout-config
 include/shout/
 include/shout/shout.h
 lib/libshout.a
 lib/libshout.la
+lib/pkgconfig/
+lib/pkgconfig/shout.pc
 share/aclocal/
 share/aclocal/shout.m4
 share/examples/libshout/
 @comment share/examples/libshout/COPYING
+@comment share/examples/libshout/NEWS
 @comment share/examples/libshout/README
 share/examples/libshout/example.c
 share/examples/libshout/nonblocking.c
Reply | Threaded
Open this post in threaded view
|

Re: UPDATE: net/libshout (please disregard previously sent patches)

Aleksander Piotrowski
Moritz Grimm <[hidden email]> wrote:

> * Fix another double-free() that, unfortunately, didn't make it into 2.2
>   in time
[...]

> diff -pruN --exclude=CVS /usr/ports/net/libshout/patches/patch-src_shout_c ./patches/patch-src_shout_c
> --- /usr/ports/net/libshout/patches/patch-src_shout_c Tue Apr 19 22:07:11 2005
> +++ ./patches/patch-src_shout_c Fri Jan  6 12:31:10 2006
> @@ -1,7 +1,36 @@
>  $OpenBSD: patch-src_shout_c,v 1.1 2005/04/19 20:07:11 sturm Exp $
> ---- src/shout.c.orig Sun Apr 17 12:25:25 2005
> -+++ src/shout.c Sun Apr 17 12:51:32 2005
> -@@ -489,7 +489,7 @@ int shout_set_mount(shout_t *self, const
> +--- src/shout.c.orig Tue Jan  3 19:56:39 2006
> ++++ src/shout.c Fri Jan  6 12:30:31 2006
> +@@ -165,6 +165,8 @@ int shout_close(shout_t *self)
> + if (self->close)
> + self->close(self);
> +
> ++ self->close = NULL;
> ++ self->send = NULL;
> + sock_close(self->socket);
> + self->state = SHOUT_STATE_UNCONNECTED;
> + self->starttime = 0;
> +@@ -183,6 +185,9 @@ int shout_send(shout_t *self, const unsi
> + if (self->state != SHOUT_STATE_CONNECTED)
> + return self->error = SHOUTERR_UNCONNECTED;
> +
> ++ if (self->send == NULL)
> ++ return self->error = SHOUTERR_NOCONNECT;
> ++
> + if (self->starttime <= 0)
> + self->starttime = timing_get_time();
> +
> +@@ -202,6 +207,9 @@ ssize_t shout_send_raw(shout_t *self, co
> + if (self->state != SHOUT_STATE_CONNECTED)
> + return SHOUTERR_UNCONNECTED;
> +
> ++ if (self->send == NULL)
> ++ return self->error = SHOUTERR_NOCONNECT;
> ++
> + self->error = SHOUTERR_SUCCESS;
> +
> + /* send immediately if possible (should be the common case) */

Is this "another double-free()" fix?  I don't see it in libshout SVN
repo at http://svn.xiph.org/icecast/trunk/libshout ...

Alek
--
W stroboskopowej burzy do źrenic D.U. dociera jeden obraz: strojący na
kontenerach strażnicy padają jak drzewa podcięte huraganem, a między ich
nogami i nad dachami kontenerów przemyka z szybkością światła cybernetyczny
cień, sinusoidalne tsunami -- Sfora Szczurojamników.
 -- Neal Stephenson, Zamieć