ó
:€1Rc           @   s@  d  d l  Z  e  j j d ƒ d  d l j Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l Z d  d l Z d  d l Z d  d l Z d  d l Td  d l
 Td  d l Td  d l m Z d Z d Z d Z d „  Z d	 d  d
 „  ƒ  YZ d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d e j f d „  ƒ  YZ  d „  Z! e" d k r<e# e  j$ d ƒ d k  r—d j% e  j$ d ƒ GHq<e# e  j$ d ƒ d k r<e  j$ d d k r<yH d j% e  j$ d ƒ GHe j j& e  j$ d ƒ Z& e e& e j' e& ƒ ƒ Wq9e( k
 r8Z) d j% e  j$ d e) ƒ GHq9Xq<e# e  j$ d ƒ d k rše  j$ d d k rše j j& e  j$ d ƒ Z& e e& e j' e& ƒ ƒ q<x• e* d d ƒ D]„ Z+ e e  j$ d ƒ Z, d j% e, ƒ GHxZ e j- d ƒ D]I Z+ e j. ƒ  Z/ e/ j0 e1 d! e+ d ƒ j2 ƒ  ƒ d j% e+ e/ j3 ƒ  ƒ GHqáWqªWe ƒ  n  d S("   iÿÿÿÿNs   ../(   t   *(   t   ttLibi   i   i   c         C   sÜ   d } d } xÃ |  d j  D]´ } | j t k ro | ro d | j k rc t | j d ƒ j d ƒ } q¾ | j } nO | j t k r¾ | r¾ d | j k r² t | j d ƒ j d ƒ } q¾ | j } n  | r | r Pq q W| | f S(   Nt    t   namet    s	   utf-16-bes   utf-8(   t   namest   nameIDt   FONT_SPECIFIER_NAME_IDt   stringt   unicodet   encodet   FONT_SPECIFIER_FAMILY_ID(   t   fontR   t   familyt   record(    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt	   shortName   s    t
   mainWindowc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sE   t  j ƒ  t j j d  ƒ |  _ d j d „  t d ƒ Dƒ ƒ |  _	 d  S(   NR   c         s   s(   |  ] } t  j t j t j ƒ Vq d  S(   N(   t   randomt   choiceR   t   ascii_lowercaset   digits(   t   .0t   x(    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pys	   <genexpr>8   s    i   (
   t   win32guit   InitCommonControlst   windllt   kernel32t   GetModuleHandleWt   Nonet   hinstt   joint   ranget   classNameRandom(   t   self(    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   __init__5   s    
c         C   s   |  j  ƒ  } |  j | ƒ } | S(   N(   t   RegisterClasst   BuildWindow(   R!   t   regt   hwnd(    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   CreateWindow:   s    c         C   s   i |  j  t 6} t j ƒ  } |  j | _ t d | _ t j d t	 ƒ | _
 t j d t ƒ | _ d j |  j ƒ | _ | | _ t j | ƒ } | S(   Ni   i    s   FontFuzzer{}(   t	   OnDestroyt
   WM_DESTROYR   t   WNDCLASSR   t	   hInstancet   COLOR_BTNFACEt   hbrBackgroundt
   LoadCursort	   IDC_ARROWt   hCursort   LoadIcont   IDI_APPLICATIONt   hIcont   formatR    t   lpszClassNamet   lpfnWndProcR#   (   R!   t   WndProct   wcR%   (    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyR#   @   s    	c         C   sm   t  j j t t B| d j |  j ƒ t d d d d d d |  j d ƒ } t  j j	 | t
 ƒ t  j j | ƒ | S(   Ns   FontFuzzer{}i
   iÐ  i  i    (   R   t   user32t   CreateWindowExWt   WS_EX_TOPMOSTt   WS_EX_NOACTIVATER4   R    t   WS_POPUPR   t
   ShowWindowt   SW_SHOWt   UpdateWindow(   R!   R%   R&   (    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyR$   L   s     		c         C   s   t  j d ƒ t S(   Ni    (   R   t   PostQuitMessaget   True(   R!   R&   t   messaget   wparamt   lparam(    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyR(   `   s    (   t   __name__t
   __module__R"   R'   R#   R$   R(   (    (    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyR   3   s
   				c   	   
   C   sÂ   d } d } t  t | ƒ } | ƒ  } x t d t | ƒ ƒ D]y } | | | | <d } t j j |  d d | d  | t | ƒ d  ƒ } | d k r› | d 7} q; | d k r; | d 7} q; q; W| | f S(   Ni    i   i   i   (   t   c_wchart   lenR   R   t   gdi32t   ExtTextOutWR   (	   t   handleDeviceContextt   char_mapt   chars_not_renderedt   chars_renderedt   array_typest   var1t   yt   ETO_GLYPH_INDEXt   result(    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   drawe   s(    			c         C   s:  d j  d „  t d d ƒ Dƒ ƒ } t j ƒ  } t j j |  t d  ƒ } | d k s^ t	 d ƒ ‚ t
 ƒ  } | j ƒ  } t j j | ƒ } d } d }	 xQt d d d ƒ D]=}
 t j d	 ƒ |
 | _ | | _ |
 | _ d | _ d | _ t | _ t | _ t | _ t | _ t | _ t | _ t | _  t! t" B| _# t j$ | ƒ } t j% | | ƒ } g  t d d
 ƒ D] } t& | ƒ ^ qa} t' | | ƒ \ } } |	 | 7}	 | | 7} t j j( t j% | | ƒ ƒ t j j) ƒ  t j j* |  t d  ƒ q¤ Wd j+ | ƒ GHd j+ |	 ƒ GHt j j, | | ƒ t j j- | ƒ d GHt j d ƒ d  S(   NR   c         s   s!   |  ] } t  j t j ƒ Vq d  S(   N(   R   R   R   R   (   R   t   i(    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pys	   <genexpr>   s    i    i   i   s   Font not addedi
   id   gš™™™™™¹?iÿ   s   [*]	{} chars not rendereds   [*]	{} chars rendereds   [*] Destroy window(.   R   R   R   t   LOGFONTR   RJ   t   AddFontResourceExAt
   FR_PRIVATER   t   AssertionErrorR   R'   R9   t   GetDCt   timet   sleept   lfHeightt
   lfFaceNamet   lfWidtht   lfEscapementt   lfOrientationt	   FW_NORMALt   lfWeightt   Falset   lfItalict   lfUnderlinet   lfStrikeOutt   DEFAULT_CHARSETt	   lfCharSett   OUT_DEFAULT_PRECISt   lfOutPrecisiont   CLIP_DEFAULT_PRECISt   lfClipPrecisiont   DEFAULT_PITCHt   FF_DONTCAREt   lfPitchAndFamilyt   CreateFontIndirectt   SelectObjectt   chrRU   t   DeleteObjectt   GdiFlusht   RemoveFontResourceExWR4   t	   ReleaseDCt   DestroyWindow(   t   fontPatht   ttfInstancet   fontNamet   lft   number_of_font_addedt   winR&   t   hdcRN   RO   t   jt   hFontt   oldFtRV   RM   t   chars_rendered_currentt   chars_not_rendered_current(    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   deploy‰   sN    "													(

c   
   	   C   s…  i  } d } xct  j t j d ƒ D]K} d GHd j | ƒ GHt  j j t j d d | ƒ } yó t j | ƒ } | | | <d j | ƒ GH| | j	 ƒ  \ } } | r<t  j j t  j j
 | t  j j | ƒ j d ƒ d d	 d
 j
 d „  t d ƒ Dƒ ƒ d ƒ ƒ } t | d ƒ j | ƒ t j j d | j d ƒ d ƒ n d j | ƒ GHd GHWq# t k
 rm}	 |	 GHq# q# Xq# Wt t  j | ƒ ƒ S(   Nt	   testcasesi   s%   ----------- Start -------------------s   [*] Loading {}s   \s   [*] Fuzzing {}s   .otfi    t   _R   c         s   s(   |  ] } t  j t j t j ƒ Vq d  S(   N(   R   R   R   R   R   (   R   R   (    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pys	   <genexpr>á   s    i   t   wbs   /statics   [*] Font {} not fuzzeds$   ------------ End -------------------(   t   ost   listdirt   syst   argvR4   t   patht   abspatht   TTFt   TTFontt   fuzzFontBytecodeR   t   basenamet   splitR   t   opent   writeR!   t	   fontsPatht   appendt	   ExceptionRI   (
   t   fontSourceDirt   fontst   testcasesFolderRV   R   t   ttt   fileInMemoryt   isFontFuzzedt   testcaseNamet   e(    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   generateTestCasesÈ   s,    !
J$	c          C   s‚   d GHxv t  j d ƒ D]e }  y5 d j |  ƒ GHt  j j d |  ƒ } t | d  ƒ Wq t k
 ry } d j |  | ƒ GHq q Xq Wd  S(   Ns*   [*] Deploy fonts found in testcases folderR‡   s   [*] Testing {}s   \s   [E] Issues parsing font {}: {}s
   testcases\(   RŠ   R‹   R4   RŽ   R   R†   R   R™   (   RV   R   R¡   (    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   viewerDeployó   s    c         C   s«   i  } xž t  j t j d ƒ D]† } yV t  j j t j d d | ƒ } t j | ƒ } | | | <d j t	 | ƒ d ƒ GHWq t
 k
 r¢ } d j | | ƒ GHq q Xq Wd  S(   Ni   s   \s   [*] Validated {} TTFs   [E] Issues parsing font {}: {}(   RŠ   R‹   RŒ   R   RŽ   R   R   R‘   R4   R   R™   (   Rš   R›   RV   R   R   R¡   (    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   validateInputFonts  s    !
c          C   sE   d GHx9 t  j d ƒ D]( }  y t  j d |  ƒ Wq q q Xq Wd  S(   Ns   [*] Cleaning up fuzzed fontsR‡   s
   testcases\(   RŠ   R‹   t   remove(   RV   (    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   cleanUp  s    t   NativeFuzzerc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  t |  _ d  S(   N(   t   fontsFolderRe   t   stopMe(   R!   t   folder(    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyR"     s    	c         C   s•   xŽ |  j  s t |  j ƒ } d j | ƒ GHxZ t j d ƒ D]I } t j ƒ  } | j t	 d | d ƒ j
 ƒ  ƒ d j | | j ƒ  ƒ GHq9 Wt ƒ  q Wd  S(   Ns   [*] Generated {} test casesR‡   s   \t   rbs   [*]	 {} : {}s
   testcases\(   R©   R¢   R¨   R4   RŠ   R‹   t   hashlibt   md5t   updateR•   t   readt	   hexdigestR£   (   R!   t   numberOfTestCasesRV   t   m(    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   run#  s     c         C   s   t  |  _ d  S(   N(   RB   R©   (   R!   (    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   stop5  s    c         C   s   d S(   Ns   Native fuzzer(    (   R!   (    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   getDescription9  s    (   RF   RG   R"   R³   R´   Rµ   (    (    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyR§     s   			c         C   s
   t  |  ƒ S(   N(   R§   (   Rª   (    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   getFuzzerInstance=  s    t   __main__s   Usage: {} font_directoryi    i   t   ds   [*] Testing {}s   [E] Issues parsing font {}: {}s   [*] Generated {} test casesR‡   s   \R«   s   [*]	 {} : {}(    s
   testcases\(4   RŒ   RŽ   R˜   t   parsers.TTFR   RŠ   R\   R   t   shutilR   t   structR¬   t   win32apiR   t	   threadingt   ctypest   win32cont	   fontToolsR   R   R   RY   R   R   RU   R   R†   R¢   R£   R¤   R¦   t   ThreadR§   R¶   RF   RI   R   R4   R   R‘   R™   R¡   R   RV   R±   R‹   R­   R²   R®   R•   R¯   R°   (    (    (    s;   /home/unknown/fonts/fontfuzzer/fuzzers_downloaded/native.pyt   <module>   sd   


	2	$?	+			!	,, 