[freetype/f14] Fix CVE-2011-0226
mkasik
mkasik at fedoraproject.org
Wed Jul 20 16:42:35 UTC 2011
commit 7505cb61b0cd92fe4d9a5a8cd8f6717b94b0b268
Author: Marek Kasik <mkasik at redhat.com>
Date: Wed Jul 20 18:35:06 2011 +0200
Fix CVE-2011-0226
Add freetype-2.4.2-CVE-2011-0226.patch
(Add better argument check for `callothersubr'.)
based on patches by Werner Lemberg,
Alexei Podtelezhnikov and Matthias Drochner
Resolves: #723469
freetype-2.4.2-CVE-2011-0226.patch | 99 ++++++++++++++++++++++++++++++++++++
freetype.spec | 11 ++++-
2 files changed, 109 insertions(+), 1 deletions(-)
---
diff --git a/freetype-2.4.2-CVE-2011-0226.patch b/freetype-2.4.2-CVE-2011-0226.patch
new file mode 100644
index 0000000..166d2cb
--- /dev/null
+++ b/freetype-2.4.2-CVE-2011-0226.patch
@@ -0,0 +1,99 @@
+--- freetype-2.4.2/src/psaux/t1decode.c 2010-05-11 00:05:58.000000000 +0200
++++ freetype-2.4.2/src/psaux/t1decode.c 2011-07-20 14:54:04.000000000 +0200
+@@ -28,6 +28,8 @@
+
+ #include "psauxerr.h"
+
++/* ensure proper sign extension */
++#define Fix2Int( f ) ( (FT_Int)(FT_Short)( (f) >> 16 ) )
+
+ /*************************************************************************/
+ /* */
+@@ -671,7 +673,7 @@
+ if ( large_int )
+ FT_TRACE4(( " %ld", value ));
+ else
+- FT_TRACE4(( " %ld", (FT_Int32)( value >> 16 ) ));
++ FT_TRACE4(( " %ld", Fix2Int( value ) ));
+ #endif
+
+ *top++ = value;
+@@ -693,8 +695,8 @@
+
+ top -= 2;
+
+- subr_no = (FT_Int)( top[1] >> 16 );
+- arg_cnt = (FT_Int)( top[0] >> 16 );
++ subr_no = Fix2Int( top[1] );
++ arg_cnt = Fix2Int( top[0] );
+
+ /***********************************************************/
+ /* */
+@@ -869,7 +871,7 @@
+ if ( arg_cnt != 1 || blend == NULL )
+ goto Unexpected_OtherSubr;
+
+- idx = (FT_Int)( top[0] >> 16 );
++ idx = Fix2Int( top[0] );
+
+ if ( idx < 0 ||
+ idx + blend->num_designs > decoder->len_buildchar )
+@@ -937,7 +939,7 @@
+ if ( arg_cnt != 2 || blend == NULL )
+ goto Unexpected_OtherSubr;
+
+- idx = (FT_Int)( top[1] >> 16 );
++ idx = Fix2Int( top[1] );
+
+ if ( idx < 0 || (FT_UInt) idx >= decoder->len_buildchar )
+ goto Unexpected_OtherSubr;
+@@ -958,7 +960,7 @@
+ if ( arg_cnt != 1 || blend == NULL )
+ goto Unexpected_OtherSubr;
+
+- idx = (FT_Int)( top[0] >> 16 );
++ idx = Fix2Int( top[0] );
+
+ if ( idx < 0 || (FT_UInt) idx >= decoder->len_buildchar )
+ goto Unexpected_OtherSubr;
+@@ -1016,11 +1018,15 @@
+ break;
+
+ default:
+- FT_ERROR(( "t1_decoder_parse_charstrings:"
+- " unknown othersubr [%d %d], wish me luck\n",
+- arg_cnt, subr_no ));
+- unknown_othersubr_result_cnt = arg_cnt;
+- break;
++ if ( arg_cnt >= 0 && subr_no >= 0 )
++ {
++ FT_ERROR(( "t1_decoder_parse_charstrings:"
++ " unknown othersubr [%d %d], wish me luck\n",
++ arg_cnt, subr_no ));
++ unknown_othersubr_result_cnt = arg_cnt;
++ break;
++ }
++ /* fall through */
+
+ Unexpected_OtherSubr:
+ FT_ERROR(( "t1_decoder_parse_charstrings:"
+@@ -1146,8 +1152,8 @@
+ top[0],
+ top[1],
+ top[2],
+- (FT_Int)( top[3] >> 16 ),
+- (FT_Int)( top[4] >> 16 ) );
++ Fix2Int( top[3] ),
++ Fix2Int( top[4] ) );
+
+ case op_sbw:
+ FT_TRACE4(( " sbw" ));
+@@ -1321,7 +1327,7 @@
+
+ FT_TRACE4(( " callsubr" ));
+
+- idx = (FT_Int)( top[0] >> 16 );
++ idx = Fix2Int( top[0] );
+ if ( idx < 0 || idx >= (FT_Int)decoder->num_subrs )
+ {
+ FT_ERROR(( "t1_decoder_parse_charstrings:"
diff --git a/freetype.spec b/freetype.spec
index 8b0a3f7..8c8d867 100644
--- a/freetype.spec
+++ b/freetype.spec
@@ -7,7 +7,7 @@
Summary: A free and portable font rendering engine
Name: freetype
Version: 2.4.2
-Release: 4%{?dist}
+Release: 5%{?dist}
License: FTL or GPLv2+
Group: System Environment/Libraries
URL: http://www.freetype.org
@@ -28,6 +28,7 @@ Patch88: freetype-multilib.patch
Patch89: freetype-2.4.2-CVE-2010-3311.patch
Patch90: freetype-2.4.2-CVE-2010-3855.patch
+Patch91: freetype-2.4.2-CVE-2011-0226.patch
Buildroot: %{_tmppath}/%{name}-%{version}-root-%(%{__id_u} -n)
@@ -96,6 +97,7 @@ popd
%patch88 -p1 -b .multilib
%patch89 -p1 -b .CVE-2010-3311
%patch90 -p1 -b .CVE-2010-3855
+%patch91 -p1 -b .CVE-2011-0226
%build
@@ -228,6 +230,13 @@ rm -rf $RPM_BUILD_ROOT
%doc docs/tutorial
%changelog
+* Wed Jul 20 2011 Marek Kasik <mkasik at redhat.com> 2.4.2-5
+- Add freetype-2.4.2-CVE-2011-0226.patch
+ (Add better argument check for `callothersubr'.)
+ - based on patches by Werner Lemberg,
+ Alexei Podtelezhnikov and Matthias Drochner
+- Resolves: #723469
+
* Mon Nov 15 2010 Marek Kasik <mkasik at redhat.com> 2.4.2-4
- Add freetype-2.4.2-CVE-2010-3855.patch
(Protect against invalid `runcnt' values.)
More information about the fonts-bugs
mailing list