
    $g                         d Z ddlmZmZ ddlZddlmZmZmZ dZ	ddl
mZ ddlmZ dd	lmZ dd
l
mZ ddl
mZ 	 ddlZn# e$ r dZY nw xY wdZddZ G d derej        ne          Z G d de          Zd Zd ZdS )z*Defused xmlrpclib

Also defuses gzip bomb
    )print_functionabsolute_importN   )DTDForbiddenEntitiesForbiddenExternalReferenceForbiddenzxmlrpc.client)ExpatParser)client)server)gzip_decode)GzipDecodedResponsei  c                    t           st          |t          }t          j        |           }t          j        d|          }	 |dk     r|                                }n|                    |dz             }n# t          $ r t          d          w xY w|	                                 |	                                 |dk    r"t          |          |k    rt          d          |S )zrgzip encoded data -> unencoded data

    Decode data using the gzip content encoding as described in RFC 1952
    Nrbmodefileobjr   r   zinvalid dataz#max gzipped payload length exceeded)gzipNotImplementedErrorMAX_DATAioBytesIOGzipFilereadIOError
ValueErrorcloselen)datalimitfgzfdecodeds        Q/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/defusedxml/xmlrpc.pydefused_gzip_decoder$   $   s    
  "!!}

4A
-T1
-
-
-C)199hhjjGGhhuqy))G ) ) )((()GGIIIIIKKKzzc'llU**>???Ns   3A7 7Bc                   8     e Zd ZdZd fd	Z fdZ fdZ xZS )DefusedGzipDecodedResponsezha file-like object to decode a response encoded with the gzip
    method, as described in RFC 1952.
    Nc                    t           st          ||nt          x| _        }|dk     r|                                }d | _        n|                    |dz             }d| _        |dk    r"t          |          |k    rt          d          t          j	        |          | _
        t                                          d| j
                   d S )Nr   r   max payload length exceededr   r   )r   r   r   r   r   
readlengthr   r   r   r   stringiosuper__init__)selfresponser   r   	__class__s       r#   r,   z#DefusedGzipDecodedResponse.__init__B   s      	&%%&+&7UUXE
U199==??D"DOO==++DDOA::#d))e++:;;;
4((dDM:::::    c                 \   | j         dk    r| j         | j        z
  }t          ||dz             }t          j                            | |          }| xj        t          |          z  c_        | j        | j         k    rt          d          |S t                                          |          S )Nr   r   r(   )	r   r)   minr   r   r   r   r   r+   )r-   nleftr   r/   s       r#   r   zDefusedGzipDecodedResponse.readS   s    :??:/DAtax  A=%%dA..DOOs4yy(OO++ !>???K77<<??"r0   c                 z    t                                                       | j                                         d S N)r+   r   r*   )r-   r/   s    r#   r   z DefusedGzipDecodedResponse.close_   s.    r0   r6   )__name__
__module____qualname____doc__r,   r   r   __classcell__r/   s   @r#   r&   r&   =   sy         ; ; ; ; ; ;"
# 
# 
# 
# 
#        r0   r&   c                   8     e Zd Zd fd	Zd Zd Zd Zd Z xZS )	DefusedExpatParserFTc                    t                                          |           || _        || _        || _        | j        }| j        r| j        |_        | j        r| j        |_	        | j
        |_        | j        r| j        |_        d S d S r6   )r+   r,   
forbid_dtdforbid_entitiesforbid_external_parserdefused_start_doctype_declStartDoctypeDeclHandlerdefused_entity_declEntityDeclHandlerdefused_unparsed_entity_declUnparsedEntityDeclHandler#defused_external_entity_ref_handlerExternalEntityRefHandler)r-   targetr@   rA   rB   parserr/   s         r#   r,   zDefusedExpatParser.__init__e   s       $..? 	M-1-LF* 	Q'+'?F$/3/PF, 	W.2.VF+++	W 	Wr0   c                 $    t          |||          r6   )r   )r-   namesysidpubidhas_internal_subsets        r#   rD   z-DefusedExpatParser.defused_start_doctype_decls   s    4...r0   c                 *    t          ||||||          r6   r   )r-   rO   is_parameter_entityvaluebaserP   rQ   notation_names           r#   rF   z&DefusedExpatParser.defused_entity_declv   s      eT5%OOOr0   c                 *    t          |d ||||          r6   rT   )r-   rO   rW   rP   rQ   rX   s         r#   rH   z/DefusedExpatParser.defused_unparsed_entity_decl{   s    dD%NNNr0   c                 &    t          ||||          r6   )r   )r-   contextrW   rP   rQ   s        r#   rJ   z6DefusedExpatParser.defused_external_entity_ref_handler   s    ($uEEEr0   )FTT)	r7   r8   r9   r,   rD   rF   rH   rJ   r;   r<   s   @r#   r>   r>   d   s        W W W W W W/ / /P P P
O O OF F F F F F Fr0   r>   c                      t           t          _        t          t          _        t
          t          _        t          rt
          t          _        d S d S r6   )r>   xmlrpc_client
FastParserr&   r   r$   r   xmlrpc_server r0   r#   monkey_patchra      s:    1M(BM% 3M 8$7!!!8 8r0   c                      d t           _        t          t           _        t          t           _        t          rt          t          _        d S d S r6   )r]   r^   _OrigGzipDecodedResponser   _orig_gzip_decoder   r_   r`   r0   r#   unmonkey_patchre      s:    #M(@M% 1M 6$5!!!6 6r0   r6   )r:   
__future__r   r   r   commonr   r   r   
__origin__xmlrpc.clientr	   xmlrpcr
   r]   r   r_   r   rd   r   rc   r   ImportErrorr   r$   r   objectr&   r>   ra   re   r`   r0   r#   <module>rm      s    7 6 6 6 6 6 6 6 				 O O O O O O O O O O
 % % % % % % * * * * * * * * * * * * : : : : : : I I I I I IKKKK   DDD    2$ $ $ $ $$!BF $ $ $NF F F F F F F F>8 8 86 6 6 6 6s   ? A	A	