bugThe FreeType Project - Bugs: bug #35646, Invalid (out-of-bounds?) read in...

 
 

bug #35646: Invalid (out-of-bounds?) read in Ins_MIRP

Submitted by:  Mateusz Jurczyk <j00ru>
Submitted on:  Mon 27 Feb 2012 09:44:19 PM UTC  
 
Severity: 3 - NormalItem Group: Crash
Status: FixedPrivacy: Public
Assigned to: Werner LEMBERG <wl>Open/Closed: Closed
Planned Release: 2.4.9

Add a New Comment(Rich Markup)
   

You are not logged in

Please log in, so followups can be emailed to you.

 

Thu 01 Mar 2012 08:32:33 PM UTC, comment #1:

Fixed in git, thanks.

Werner LEMBERG <wl>
Project AdministratorIn charge of this item.
Mon 27 Feb 2012 09:44:19 PM UTC, original submission:

Crash tested with ftbench (current git branch of freetype2 and ft2demos), compiled under Ubuntu amd64 with AddressSanitizer (http://code.google.com/p/address-sanitizer/).

Crashlog from ASAN:

Load : =================================================================
==13899== ERROR: AddressSanitizer heap-buffer-overflow on address 0x7fb6abdea080 at pc 0x4bb5e2 bp 0x7fffecae4650 sp 0x7fffecae4648
READ of size 1 at 0x7fb6abdea080 thread T0
#0 0x4bb5e2 Ins_MIRP
#1 0x4adb7c TT_RunIns
#2 0x4cead9 TT_Hint_Glyph
#3 0x4cc9bd TT_Process_Simple_Glyph
#4 0x4c7ec5 load_truetype_glyph
#5 0x4c578b TT_Load_Glyph
#6 0x48934c FT_Load_Glyph
#7 0x485be3 test_load
#8 0x485a1e benchmark
#9 0x488144 main
#10 0x7fb6ac9f9d5d __libc_start_main
0x7fb6abdea080 is located 128 bytes to the right of 0-byte region [0x7fb6abdea000,0x7fb6abdea000)
freed by thread T0 here:
previously allocated by thread T0 here:
==13899== ABORTING
Stats: 1M malloced (0M for red zones) by 763 calls
Stats: 0M realloced by 22 calls
Stats: 0M freed by 56 calls
Stats: 0M really freed by 0 calls
Stats: 36M (9221 full pages) mmaped in 9 calls
mmaps by size class: 8:16383; 9:8191; 10:4095; 11:2047; 12:1024; 13:512; 15:128; 17:32; 19:8;
mallocs by size class: 8:700; 9:21; 10:11; 11:16; 12:6; 13:1; 15:3; 17:1; 19:4;
frees by size class: 8:30; 9:4; 10:9; 11:8; 12:3; 13:1; 19:1;
rfrees by size class:
Stats: malloc large: 5 small slow: 8
Shadow byte and word:
0x1ff6d57bd410: fa
0x1ff6d57bd410: fa fa fa fa fa fa fa fa
More shadow bytes:
0x1ff6d57bd3f0: fa fa fa fa fa fa fa fa
0x1ff6d57bd3f8: fa fa fa fa fa fa fa fa
0x1ff6d57bd400: fa fa fa fa fa fa fa fa
0x1ff6d57bd408: fa fa fa fa fa fa fa fa
=>0x1ff6d57bd410: fa fa fa fa fa fa fa fa
0x1ff6d57bd418: fa fa fa fa fa fa fa fa
0x1ff6d57bd420: fa fa fa fa fa fa fa fa
0x1ff6d57bd428: fa fa fa fa fa fa fa fa
0x1ff6d57bd430: fa fa fa fa fa fa fa fa

Log from Valgrind:

==13380== Memcheck, a memory error detector
==13380== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==13380== Using Valgrind-3.8.0.SVN and LibVEX; rerun with -h for copyright info
==13380== Command: ./ftbench tmp/Norasi.dfont.asan.2.180
==13380==
Load : TT_Load_Simple_Glyph: too many instructions (19744)
==13380== Invalid read of size 8
==13380== at 0x421DC4: Ins_MIRP (freetype2/src/truetype/ttinterp.c:6277)
==13380== by 0x42562E: TT_RunIns (freetype2/src/truetype/ttinterp.c:8145)
==13380== by 0x41CEF8: TT_Run_Context (freetype2/src/truetype/ttinterp.c:751)
==13380== by 0x4175DD: TT_Hint_Glyph (freetype2/src/truetype/ttgload.c:799)
==13380== by 0x417BB2: TT_Process_Simple_Glyph (freetype2/src/truetype/ttgload.c:920)
==13380== by 0x418BF3: load_truetype_glyph (freetype2/src/truetype/ttgload.c:1408)
==13380== by 0x419FEC: TT_Load_Glyph (freetype2/src/truetype/ttgload.c:2044)
==13380== by 0x414DB1: tt_glyph_load (freetype2/src/truetype/ttdriver.c:334)
==13380== by 0x4073F6: FT_Load_Glyph (freetype2/src/base/ftobjs.c:694)
==13380== by 0x40177C: test_load (ft2demos-2.4.8/src/ftbench.c:221)
==13380== by 0x4016B7: benchmark (ft2demos-2.4.8/src/ftbench.c:191)
==13380== by 0x40274D: main (ft2demos-2.4.8/src/ftbench.c:794)
==13380== Address 0x5854800 is not stack'd, malloc'd or (recently) free'd
==13380==
==13380== Invalid read of size 8
==13380== at 0x421DCA: Ins_MIRP (freetype2/src/truetype/ttinterp.c:6277)
==13380== by 0x42562E: TT_RunIns (freetype2/src/truetype/ttinterp.c:8145)
==13380== by 0x41CEF8: TT_Run_Context (freetype2/src/truetype/ttinterp.c:751)
==13380== by 0x4175DD: TT_Hint_Glyph (freetype2/src/truetype/ttgload.c:799)
==13380== by 0x417BB2: TT_Process_Simple_Glyph (freetype2/src/truetype/ttgload.c:920)
==13380== by 0x418BF3: load_truetype_glyph (freetype2/src/truetype/ttgload.c:1408)
==13380== by 0x419FEC: TT_Load_Glyph (freetype2/src/truetype/ttgload.c:2044)
==13380== by 0x414DB1: tt_glyph_load (freetype2/src/truetype/ttdriver.c:334)
==13380== by 0x4073F6: FT_Load_Glyph (freetype2/src/base/ftobjs.c:694)
==13380== by 0x40177C: test_load (ft2demos-2.4.8/src/ftbench.c:221)
==13380== by 0x4016B7: benchmark (ft2demos-2.4.8/src/ftbench.c:191)
==13380== by 0x40274D: main (ft2demos-2.4.8/src/ftbench.c:794)
==13380== Address 0x5854808 is not stack'd, malloc'd or (recently) free'd
==13380==
TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
1318.004 us/op
Load_Advances (Normal) : 26.778 us/op
Load_Advances (Fast) : 1.967 us/op
Render : TT_Load_Simple_Glyph: too many instructions (19744)
ft_smooth_render_generic: glyph too large: 93 x 189546
TT_Load_Simple_Glyph: too many instructions (19744)
ft_smooth_render_generic: glyph too large: 93 x 189546
TT_Load_Simple_Glyph: too many instructions (19744)
ft_smooth_render_generic: glyph too large: 93 x 189546
TT_Load_Simple_Glyph: too many instructions (19744)
ft_smooth_render_generic: glyph too large: 93 x 189546
497.063 us/op
Get_Glyph : TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
73.750 us/op
Get_CBox : TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
25.248 us/op
Get_Char_Index : 2.850 us/op
Iterate CMap : 658.473 us/op
New_Face : 3747.695 us/op
Embolden : TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
TT_Load_Simple_Glyph: too many instructions (19744)
12.483 us/op
==13380==
==13380== HEAP SUMMARY:
==13380== in use at exit: 0 bytes in 0 blocks
==13380== total heap usage: 52,158 allocs, 52,158 frees, 228,156,746 bytes allocated
==13380==
==13380== All heap blocks were freed -- no leaks are possible
==13380==
==13380== For counts of detected and suppressed errors, rerun with: -v
==13380== ERROR SUMMARY: 46 errors from 2 contexts (suppressed: 4 from 4)

Mateusz Jurczyk <j00ru>
Project Member

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach File(s):
   
   
Comment:
   

Attached Files
file #25196:  Norasi.dfont.asan.2.180 added by j00ru (106KiB - application/octet-stream)

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -unavailable- added by wl (Posted a comment)
  • -unavailable- added by j00ru (Submitted the item)
  •  

    Do you think this task is very important?
    If so, you can click here to add your encouragement to it.
    This task has 0 encouragements so far.

    Only logged-in users can vote.

     

    Please enter the title of George Orwell's famous dystopian book (it's a date):

     

     

    Follow 6 latest changes.

    Date Changed By Updated Field Previous Value => Replaced By
    Thu 01 Mar 2012 08:32:33 PM UTCwlStatusNone=>Fixed
      PrivacyPrivate=>Public
      Assigned toNone=>wl
      Open/ClosedOpen=>Closed
      Planned ReleaseNone=>2.4.9
    Mon 27 Feb 2012 09:44:19 PM UTCj00ruAttached File-=>Added Norasi.dfont.asan.2.180, #25196

    Back to the top


    Powered by Savane 3.1-cleanup1