
    >/i                     L    S SK r S SKJr   " S S5      r " S S5      rS rS rg)	    N)	constantsc                       \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr\4S jrS rS rS r S r!S  r"S! r#S" r$S# r%S$r&g%)&Cwe
   r         N   O   P   Y   ^      i  i  i'  i?  iF  iG  iJ  iy  i  i  i  i]  i  i  iF  z.https://cwe.mitre.org/data/definitions/%s.htmlc                     Xl         g Nid)selfr   s     K/home/james-whalen/.local/lib/python3.13/site-packages/bandit/core/issue.py__init__Cwe.__init__&   s        c                     U R                   [        R                  :X  a  g[        R                  [	        U R                   5      -  $ )N )r   r   NOTSETMITRE_URL_PATTERNstrr   s    r   linkCwe.link)   s.    77cjj $$s477|33r   c                 ~    U R                   [        R                  :X  a  gSU R                   U R                  5       4-  $ )Nr   zCWE-%i (%s)r   r   r   r   r   s    r   __str__Cwe.__str__/   s/    77cjj 555r   c                 |    U R                   [        R                  :w  a  U R                   U R                  5       S.$ 0 $ )N)r   r   r!   r   s    r   as_dictCwe.as_dict5   s7     ww#**$ 77DIIK0	
 	
r   c                 4    [        U R                  5       5      $ r   )r   r%   r   s    r   as_jsonsCwe.as_jsons<   s    4<<>""r   c                 b    SU;   a  [        US   5      U l        g [        R                  U l        g )Nr   )intr   r   r   )r   datas     r   	from_dictCwe.from_dict?   s#    4<$t*oDGjjDGr   c                 4    U R                   UR                   :H  $ r   r   r   others     r   __eq__
Cwe.__eq__E       ww%((""r   c                 4    U R                   UR                   :g  $ r   r   r0   s     r   __ne__
Cwe.__ne__H   r4   r   c                     [        U 5      $ r   r   r   s    r   __hash__Cwe.__hash__K       $xr   r   N)'__name__
__module____qualname____firstlineno__r   IMPROPER_INPUT_VALIDATIONPATH_TRAVERSALOS_COMMAND_INJECTIONXSS	BASIC_XSSSQL_INJECTIONCODE_INJECTION IMPROPER_WILDCARD_NEUTRALIZATIONHARD_CODED_PASSWORDIMPROPER_ACCESS_CONTROLIMPROPER_CERT_VALIDATIONCLEARTEXT_TRANSMISSIONINADEQUATE_ENCRYPTION_STRENGTHBROKEN_CRYPTOINSUFFICIENT_RANDOM_VALUESINSECURE_TEMP_FILE!UNCONTROLLED_RESOURCE_CONSUMPTION(DOWNLOAD_OF_CODE_WITHOUT_INTEGRITY_CHECK!DESERIALIZATION_OF_UNTRUSTED_DATAMULTIPLE_BINDSIMPROPER_CHECK_OF_EXCEPT_CONDINCORRECT_PERMISSION_ASSIGNMENT)INAPPROPRIATE_ENCODING_FOR_OUTPUT_CONTEXTr   r   r   r"   r%   r(   r-   r2   r6   r9   __static_attributes__ r   r   r   r   
   s    F "N
CIMN'*$!" %("M!$(+%/2,(+%N$'!&)#03-H  46
#!##r   r   c                   ~    \ rS rSrS\R
                  SSSSSS4S jrS rS rS	 r	S
 r
S rSS jrSS jrSS jrSrg)Issuer
   r   r   Nc
                    Xl         [        U5      U l        X0l        [	        U[
        5      (       a  UR                  S5      nX@l        XPl        SU l	        S U l
        SU l        Xpl        X`l        Xl        Xl        / U l        g )Nutf-8r   )severityr   cwe
confidence
isinstancebytesdecodetextidentfnamefdatatesttest_idlineno
col_offsetend_col_offset	linerange)
r   r^   r_   r`   rd   re   rj   ri   rk   rl   s
             r   r   Issue.__init__P   so     !s8$dE"";;w'D	


	$,r   c           
      
   SU R                   U R                  U R                  =(       d    U R                  [	        U R
                  5      U R                  U R                  U R                  U R                  U R                  4	-  $ )NzHIssue: '%s' from %s:%s: CWE: %s, Severity: %s Confidence: %s at %s:%i:%i)rd   ri   re   rh   r   r_   r^   r`   rf   rj   rk   r   s    r   r"   Issue.__str__l   sd     IILLZZ$499MMMOOJJKKOO


 	
r   c                 :   ^ ^ / SQn[        UU 4S jU 5       5      $ )N)rd   r^   r_   r`   rf   rh   ri   c              3   V   >#    U  H  n[        TU5      [        TU5      :H  v   M      g 7fr   )getattr).0fieldr1   r   s     r   	<genexpr>Issue.__eq__.<locals>.<genexpr>   s+      
$ D% GE5$99$s   &))all)r   r1   match_typess   `` r   r2   Issue.__eq__|   s&    
  
$
 
 	
r   c                 .    U R                  U5      (       + $ r   )r2   r0   s     r   r6   Issue.__ne__   s    ;;u%%%r   c                     [        U 5      $ r   r   r   s    r   r9   Issue.__hash__   r;   r   c                     [         R                  nUR                  U R                  5      UR                  U5      :  =(       a-    UR                  U R                  5      UR                  U5      :  $ )a2  Utility to filter on confidence and severity

This function determines whether an issue should be included by
comparing the severity and confidence rating of the issue to minimum
thresholds specified in 'severity' and 'confidence' respectively.

Formatters should call manager.filter_results() directly.

This will return false if either the confidence or severity of the
issue are lower than the given threshold values.

:param severity: Severity threshold
:param confidence: Confidence threshold
:return: True/False depending on whether issue meets threshold

)r   RANKINGindexr^   r`   )r   r^   r`   ranks       r   filterIssue.filter   s\    "   zz$--(DJJ-
 
 Djj)TZZ
-CC	Dr   c                    / n[        US5      n[        SU R                  US-  -
  5      nU[        U R                  5      -   U-   S-
  nU R                  S:X  aH  U R
                  R                  S5        [        SU5       H  nU R
                  R                  5         M     U(       a  SOSn[        XE5       H  nU R                  S:X  a  U R
                  R                  5       n	O![        R                  " U R                  U5      n	[        U	[        5      (       a  U	R                  S5      n	[        U	5      (       d    OUR                  XxU	4-  5        M     SR                  U5      $ )	zGets lines of code from a file the generated this issue.

:param max_lines: Max lines of context to return
:param tabbed: Use tabbing in the output
:return: strings of code
      z<stdin>r   z%i	%sz%i %sr]   r   )maxrj   lenrm   rf   rg   seekrangereadline	linecachegetlinera   rb   rc   appendjoin)
r   	max_linestabbedlineslminlmaxline_numtmpltlinerd   s
             r   get_codeIssue.get_code   s    	1%	1dkkIN23c$..))I59::"JJOOA!!TN

##% + #$%DzzY&zz**, ((T:$&&{{7+t99LL-. & wwu~r   c                    U R                   U R                  U R                  U R                  U R                  R                  5       U R                  U R                  R                  S5      R                  S5      U R                  U R                  U R                  U R                  S.nU(       a  U R                  US9US'   U$ )z5Convert the issue to a dict of values for outputting.r]   )filename	test_nameri   issue_severity	issue_cweissue_confidence
issue_textline_number
line_rangerk   rl   )r   code)rf   rh   ri   r^   r_   r%   r`   rd   encoderc   rj   rm   rk   rl   r   )r   	with_coder   outs       r   r%   Issue.as_dict   s     

||"mm))+ $))**73::7C;;..//"11
 --)-<CK
r   c                 :   US   U l         US   U l        US   U l        [        US   5      U l        US   U l        US   U l        US   U l        US   U l        US	   U l	        US
   U l
        UR                  SS5      U l        UR                  SS5      U l        g )Nr   r   r   r   r   r   r   ri   r   r   rk   r   rl   )r   rf   r^   cwe_from_dictr_   r`   rd   rh   ri   rj   rm   getrk   rl   )r   r,   r   s      r   r-   Issue.from_dict   s    L	*%
-. k!2312&	%	I=)l+((<3"hh'7;r   )r   rk   r`   r_   rl   rg   rf   re   rj   rm   r^   rh   ri   rd   )   F)Tr   )T)r<   r=   r>   r?   r   CONFIDENCE_DEFAULTr   r"   r2   r6   r9   r   r   r%   r-   rW   rX   r   r   rZ   rZ   O   sQ     //8
 
"&D,@(<r   rZ   c                 <    [        5       nUR                  U 5        U$ r   )r   r-   )r,   r_   s     r   r   r      s    
%CMM$Jr   c                 @    [        U S   S9nUR                  U 5        U$ )Nr   )r^   )rZ   r-   )r,   is     r   issue_from_dictr      s#    t,-.AKKHr   )r   bandit.corer   r   rZ   r   r   rX   r   r   <module>r      s1   
  !B BJZ< Z<zr   