Revision: 5556
          http://ipcop.svn.sourceforge.net/ipcop/?rev=5556&view=rev
Author:   gespinasse
Date:     2011-03-24 21:24:53 +0000 (Thu, 24 Mar 2011)

Log Message:
-----------
Patch pango against CVE-2011-0020 and CVE-2011-0064
Remove obsolete configure options no more recognized like 
--without-binconfigs --without-libpng-compat

--disable-static is not required as default is no static libs.
But that does not hurt

pango is already in update

Modified Paths:
--------------
    ipcop/trunk/lfs/pango

Added Paths:
-----------
    ipcop/trunk/src/patches/pango-1.28.3_CVE-2011-0020.patch
    ipcop/trunk/src/patches/pango-1.28.3_CVE-2011-0064.patch

Modified: ipcop/trunk/lfs/pango
===================================================================
--- ipcop/trunk/lfs/pango       2011-03-24 20:02:37 UTC (rev 5555)
+++ ipcop/trunk/lfs/pango       2011-03-24 21:24:53 UTC (rev 5556)
@@ -81,12 +81,13 @@
 $(TARGET) : $(firstword $(MAKEFILE_LIST)) $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && patch -Np1 -i 
$(DIR_PATCHES)/$(THISAPP)_CVE-2011-0020.patch
+       cd $(DIR_APP) && patch -Np1 -i 
$(DIR_PATCHES)/$(THISAPP)_CVE-2011-0064.patch
 
        cd $(DIR_APP) && ./configure    --prefix=/usr \
                                        --sysconfdir=/etc \
-                                       --disable-static \
-                                       --without-binconfigs \
-                                       --without-libpng-compat
+                                       --disable-static
+
        cd $(DIR_APP) && make -j $(PARALLELISM)
        cd $(DIR_APP) && make install
        

Added: ipcop/trunk/src/patches/pango-1.28.3_CVE-2011-0020.patch
===================================================================
--- ipcop/trunk/src/patches/pango-1.28.3_CVE-2011-0020.patch                    
        (rev 0)
+++ ipcop/trunk/src/patches/pango-1.28.3_CVE-2011-0020.patch    2011-03-24 
21:24:53 UTC (rev 5556)
@@ -0,0 +1,50 @@
+debian borrowed
+http://patch-tracker.debian.org/patch/series/dl/pango1.0/1.28.3-1+squeeze2/01_CVE-2011-0020.patch
+
+CVE-2011-0020
+Debian #610792
+Launchpad #696616
+GNOME #639882
+
+diff --git a/pango/pangoft2-render.c b/pango/pangoft2-render.c
+index bd3b7d4..42923f4 100644
+--- a/pango/pangoft2-render.c
++++ b/pango/pangoft2-render.c
+@@ -121,9 +121,14 @@ pango_ft2_font_render_box_glyph (int      width,
+ 
+   box->bitmap.width = width;
+   box->bitmap.rows = height;
+-  box->bitmap.pitch = height;
++  box->bitmap.pitch = width;
+ 
+-  box->bitmap.buffer = g_malloc0 (box->bitmap.rows * box->bitmap.pitch);
++  box->bitmap.buffer = g_malloc0_n (box->bitmap.rows, box->bitmap.pitch);
++
++  if (G_UNLIKELY (!box->bitmap.buffer)) {
++    g_slice_free (PangoFT2RenderedGlyph, box);
++    return NULL;
++  }
+ 
+   /* draw the box */
+   for (j = 0; j < line_width; j++)
+@@ -226,6 +231,11 @@ pango_ft2_font_render_glyph (PangoFont *font,
+       rendered->bitmap_left = face->glyph->bitmap_left;
+       rendered->bitmap_top = face->glyph->bitmap_top;
+ 
++      if (G_UNLIKELY (!rendered->bitmap.buffer)) {
++        g_slice_free (PangoFT2RenderedGlyph, rendered);
++      return NULL;
++      }
++
+       return rendered;
+     }
+   else
+@@ -276,6 +286,8 @@ pango_ft2_renderer_draw_glyph (PangoRenderer *renderer,
+   if (rendered_glyph == NULL)
+     {
+       rendered_glyph = pango_ft2_font_render_glyph (font, glyph);
++      if (rendered_glyph == NULL)
++        return;
+       add_glyph_to_cache = TRUE;
+     }
+ 

Added: ipcop/trunk/src/patches/pango-1.28.3_CVE-2011-0064.patch
===================================================================
--- ipcop/trunk/src/patches/pango-1.28.3_CVE-2011-0064.patch                    
        (rev 0)
+++ ipcop/trunk/src/patches/pango-1.28.3_CVE-2011-0064.patch    2011-03-24 
21:24:53 UTC (rev 5556)
@@ -0,0 +1,189 @@
+debian borrowed
+http://patch-tracker.debian.org/patch/series/dl/pango1.0/1.28.3-1+squeeze2/02_CVE-2011-0064.patch
+
+From 3104961bc0ffaf847d2a1e116e6de4fdc1cd8ada Mon Sep 17 00:00:00 2001
+From: Behdad Esfahbod <beh...@behdad.org>
+Date: Thu, 2 Dec 2010 16:00:46 +1300
+Subject: [PATCH] Handle realloc failure in the buffer
+
+Ported from http://cgit.freedesktop.org/harfbuzz/commit/?id=a6a79df5fe2e
+by Karl Tomlinson <kar...@karlt.net>
+---
+ pango/opentype/hb-buffer-private.h |    1 +
+ pango/opentype/hb-buffer.c         |   70 +++++++++++++++++++++---------------
+ pango/opentype/hb-buffer.h         |    2 +-
+ 3 files changed, 43 insertions(+), 30 deletions(-)
+
+diff --git a/pango/opentype/hb-buffer-private.h 
b/pango/opentype/hb-buffer-private.h
+index 45cdc4d..f194786 100644
+--- a/pango/opentype/hb-buffer-private.h
++++ b/pango/opentype/hb-buffer-private.h
+@@ -72,6 +72,7 @@ struct _hb_buffer_t {
+   unsigned int allocated;
+ 
+   hb_bool_t    have_output; /* weather we have an output buffer going on */
++  hb_bool_t    in_error; /* Allocation failed */
+   unsigned int in_length;
+   unsigned int out_length;
+   unsigned int in_pos;
+diff --git a/pango/opentype/hb-buffer.c b/pango/opentype/hb-buffer.c
+index 93b51e5..e9788ad 100644
+--- a/pango/opentype/hb-buffer.c
++++ b/pango/opentype/hb-buffer.c
+@@ -52,23 +52,21 @@ static hb_buffer_t _hb_buffer_nil = {
+  * in_string and out_string.
+  */
+ 
+-/* XXX err handling */
+-
+ /* Internal API */
+ 
+-static void
++static hb_bool_t
+ hb_buffer_ensure_separate (hb_buffer_t *buffer, unsigned int size)
+ {
+-  hb_buffer_ensure (buffer, size);
++  if (HB_UNLIKELY (!hb_buffer_ensure (buffer, size))) return FALSE;
+   if (buffer->out_string == buffer->in_string)
+   {
+     assert (buffer->have_output);
+-    if (!buffer->positions)
+-      buffer->positions = calloc (buffer->allocated, sizeof 
(buffer->positions[0]));
+ 
+     buffer->out_string = (hb_internal_glyph_info_t *) buffer->positions;
+     memcpy (buffer->out_string, buffer->in_string, buffer->out_length * 
sizeof (buffer->out_string[0]));
+   }
++
++  return TRUE;
+ }
+ 
+ /* Public API */
+@@ -114,6 +112,7 @@ void
+ hb_buffer_clear (hb_buffer_t *buffer)
+ {
+   buffer->have_output = FALSE;
++  buffer->in_error = FALSE;
+   buffer->in_length = 0;
+   buffer->out_length = 0;
+   buffer->in_pos = 0;
+@@ -122,32 +121,42 @@ hb_buffer_clear (hb_buffer_t *buffer)
+   buffer->max_lig_id = 0;
+ }
+ 
+-void
++hb_bool_t
+ hb_buffer_ensure (hb_buffer_t *buffer, unsigned int size)
+ {
+-  unsigned int new_allocated = buffer->allocated;
+-
+-  if (size > new_allocated)
++  if (HB_UNLIKELY (size > buffer->allocated))
+   {
++    unsigned int new_allocated = buffer->allocated;
++    hb_internal_glyph_position_t *new_pos;
++    hb_internal_glyph_info_t *new_info;
++    hb_bool_t separate_out;
++
++    if (HB_UNLIKELY (buffer->in_error))
++      return FALSE;
++
++    separate_out = buffer->out_string != buffer->in_string;
++
+     while (size > new_allocated)
+       new_allocated += (new_allocated >> 1) + 8;
+ 
+-    if (buffer->positions)
+-      buffer->positions = realloc (buffer->positions, new_allocated * sizeof 
(buffer->positions[0]));
++    new_pos = (hb_internal_glyph_position_t *) realloc (buffer->positions, 
new_allocated * sizeof (buffer->positions[0]));
++    new_info = (hb_internal_glyph_info_t *) realloc (buffer->in_string, 
new_allocated * sizeof (buffer->in_string[0]));
+ 
+-    if (buffer->out_string != buffer->in_string)
+-    {
+-      buffer->in_string = realloc (buffer->in_string, new_allocated * sizeof 
(buffer->in_string[0]));
+-      buffer->out_string = (hb_internal_glyph_info_t *) buffer->positions;
+-    }
+-    else
+-    {
+-      buffer->in_string = realloc (buffer->in_string, new_allocated * sizeof 
(buffer->in_string[0]));
+-      buffer->out_string = buffer->in_string;
+-    }
++    if (HB_UNLIKELY (!new_pos || !new_info))
++      buffer->in_error = TRUE;
++
++    if (HB_LIKELY (new_pos))
++      buffer->positions = new_pos;
+ 
+-    buffer->allocated = new_allocated;
++    if (HB_LIKELY (new_info))
++      buffer->in_string = new_info;
++
++    buffer->out_string = separate_out ? (hb_internal_glyph_info_t *) 
buffer->positions : buffer->in_string;
++    if (HB_LIKELY (!buffer->in_error))
++      buffer->allocated = new_allocated;
+   }
++
++  return HB_LIKELY (!buffer->in_error);
+ }
+ 
+ void
+@@ -158,7 +167,7 @@ hb_buffer_add_glyph (hb_buffer_t    *buffer,
+ {
+   hb_internal_glyph_info_t *glyph;
+ 
+-  hb_buffer_ensure (buffer, buffer->in_length + 1);
++  if (HB_UNLIKELY (!hb_buffer_ensure (buffer, buffer->in_length + 1))) return;
+ 
+   glyph = &buffer->in_string[buffer->in_length];
+   glyph->codepoint = codepoint;
+@@ -213,6 +222,8 @@ _hb_buffer_swap (hb_buffer_t *buffer)
+ 
+   assert (buffer->have_output);
+ 
++  if (HB_UNLIKELY (buffer->in_error)) return;
++
+   if (buffer->out_string != buffer->in_string)
+   {
+     hb_internal_glyph_info_t *tmp_string;
+@@ -265,7 +276,8 @@ _hb_buffer_add_output_glyphs (hb_buffer_t *buffer,
+   if (buffer->out_string != buffer->in_string ||
+       buffer->out_pos + num_out > buffer->in_pos + num_in)
+   {
+-    hb_buffer_ensure_separate (buffer, buffer->out_pos + num_out);
++    if (HB_UNLIKELY (!hb_buffer_ensure_separate (buffer, buffer->out_pos + 
num_out)))
++        return;
+   }
+ 
+   mask = buffer->in_string[buffer->in_pos].mask;
+@@ -302,7 +314,7 @@ _hb_buffer_add_output_glyph (hb_buffer_t *buffer,
+ 
+   if (buffer->out_string != buffer->in_string)
+   {
+-    hb_buffer_ensure (buffer, buffer->out_pos + 1);
++    if (HB_UNLIKELY (!hb_buffer_ensure (buffer, buffer->out_pos + 1))) return;
+     buffer->out_string[buffer->out_pos] = buffer->in_string[buffer->in_pos];
+   }
+   else if (buffer->out_pos != buffer->in_pos)
+@@ -332,7 +344,7 @@ _hb_buffer_next_glyph (hb_buffer_t *buffer)
+ 
+   if (buffer->out_string != buffer->in_string)
+   {
+-    hb_buffer_ensure (buffer, buffer->out_pos + 1);
++    if (HB_UNLIKELY (!hb_buffer_ensure (buffer, buffer->out_pos + 1))) return;
+     buffer->out_string[buffer->out_pos] = buffer->in_string[buffer->in_pos];
+   }
+   else if (buffer->out_pos != buffer->in_pos)
+diff --git a/pango/opentype/hb-buffer.h b/pango/opentype/hb-buffer.h
+index b030ba9..aaf6694 100644
+--- a/pango/opentype/hb-buffer.h
++++ b/pango/opentype/hb-buffer.h
+@@ -94,7 +94,7 @@ hb_buffer_clear (hb_buffer_t *buffer);
+ void
+ hb_buffer_clear_positions (hb_buffer_t *buffer);
+ 
+-void
++hb_bool_t
+ hb_buffer_ensure (hb_buffer_t  *buffer,
+                 unsigned int  size);
+ 
+-- 
+1.7.2.2


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Enable your software for Intel(R) Active Management Technology to meet the
growing manageability and security demands of your customers. Businesses
are taking advantage of Intel(R) vPro (TM) technology - will your software 
be a part of the solution? Download the Intel(R) Manageability Checker 
today! http://p.sf.net/sfu/intel-dev2devmar
_______________________________________________
Ipcop-svn mailing list
Ipcop-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipcop-svn

Reply via email to