@@ -232,15 +232,41 @@ def uuencode(self):
232232
233233 def uudecode (self ):
234234 lines = self .data .strip ().split (b"\n " )
235- if len (lines ) < 3 or b"begin 644" not in lines [0 ].lower (): # pragma: no cover
236- raise ValueError ("Invalid UUencode format. Missing header" )
237235
238- data_lines = lines [1 :- 1 ] # Remove header and footer
236+ # More flexible header check - just look for "begin"
237+ if len (lines ) < 3 or not lines [0 ].lower ().startswith (b"begin" ):
238+ raise ValueError (
239+ "Invalid UUencode format. Missing header"
240+ ) # pragma: no cover
241+
242+ # Find where data actually starts (skip header)
243+ data_start = 1
244+
245+ # Find where data ends (before 'end' or backtick line)
246+ data_end = len (lines )
247+ for i in range (len (lines ) - 1 , 0 , - 1 ):
248+ if lines [i ].strip ().lower () == b"end" :
249+ data_end = i
250+ break
251+ elif (
252+ lines [i ].strip () == b"`"
253+ ): # Handle backtick before end # pragma: no cover
254+ data_end = i
255+ break
256+
257+ data_lines = lines [data_start :data_end ]
239258
240259 decoded_data = []
241260 for line in data_lines :
242- decoded_chunk = binascii .a2b_uu (line )
243- decoded_data .append (decoded_chunk )
261+ # Skip empty lines and backticks
262+ if not line .strip () or line .strip () == b"`" :
263+ continue
264+ try :
265+ decoded_chunk = binascii .a2b_uu (line )
266+ decoded_data .append (decoded_chunk )
267+ except binascii .Error : # pragma: no cover
268+ # Skip lines that can't be decoded (like extra backticks)
269+ continue
244270
245271 return b"" .join (decoded_data )
246272
0 commit comments