mirror of
				https://github.com/devine-dl/pywidevine.git
				synced 2025-11-04 03:44:50 +00:00 
			
		
		
		
	Support duplicated SignedMessages in Cdm.set_service_certificate
Fixes #41 Seems some services like TF1 (France) returns a SignedMessage twice in one response body by mistake, resulting in a partial parse decoding error as pywidevine doesn't expect the parsed-then-serialized data to differ from the received data. This workaround checks if the parsed-then-serialized data is in the received data multiple times without any leftover data. If there's no leftover data it considers it safe to continue.
This commit is contained in:
		
							parent
							
								
									17cefbf1d8
								
							
						
					
					
						commit
						a04e751aa1
					
				@ -222,7 +222,14 @@ class Cdm:
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            signed_message.ParseFromString(certificate)
 | 
			
		||||
            if signed_message.SerializeToString() == certificate:
 | 
			
		||||
            if (
 | 
			
		||||
                signed_message.SerializeToString() == certificate or
 | 
			
		||||
                # See https://github.com/devine-dl/pywidevine/issues/41
 | 
			
		||||
                all(
 | 
			
		||||
                    bytes(chunk) == signed_message.SerializeToString()
 | 
			
		||||
                    for chunk in zip(*[iter(certificate)] * len(signed_message.SerializeToString()))
 | 
			
		||||
                )
 | 
			
		||||
            ):
 | 
			
		||||
                signed_drm_certificate.ParseFromString(signed_message.msg)
 | 
			
		||||
            else:
 | 
			
		||||
                signed_drm_certificate.ParseFromString(certificate)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user