44#
55# SPDX-License-Identifier: LGPL-3.0-or-later
66#
7- # Last Updated: 6-15 -2026
7+ # Last Updated: 6-16 -2026
88
99"""Rohde and Schwarz Converter"""
1010
@@ -82,10 +82,19 @@ def safe_extract(tar, target_dir):
8282 """
8383 Extract only safe members from a tarfile.
8484 """
85+ safe_members = []
8586 for member in tar .getmembers ():
87+ if member .issym () or member .islnk ():
88+ raise SigMFConversionError (f"Refusing to extract link from TAR: { member .name } " )
8689 if not is_safe_member (tar , member , target_dir ):
87- raise Exception (f"Unsafe path detected in TAR: { member .name } " )
88- tar .extract (member , target_dir )
90+ raise SigMFConversionError (f"Unsafe path detected in TAR: { member .name } " )
91+ safe_members .append (member )
92+
93+ for member in safe_members :
94+ try :
95+ tar .extract (member , target_dir , set_attrs = False )
96+ except TypeError :
97+ tar .extract (member , target_dir )
8998
9099def extract_iq_tar_to_directory (rohdeschwarz_path , file_dest_dir = None ):
91100 tar_path = Path (rohdeschwarz_path )
@@ -259,7 +268,7 @@ def _build_metadata(xml_path: Path) -> Tuple[dict, dict, list, int]:
259268
260269 datafilename = None
261270 datafilename_raw = _text_of (root , "DataFilename" )
262- if datafilename_raw :
271+ if datafilename_raw is not None :
263272 try :
264273 datafilename = str (datafilename_raw )
265274 except ValueError :
@@ -321,8 +330,6 @@ def _build_metadata(xml_path: Path) -> Tuple[dict, dict, list, int]:
321330 dt = datetime .fromtimestamp (secs , tz = timezone .utc ) + timedelta (microseconds = rem_ns / 1000 )
322331 iso_8601_string = dt .strftime (SIGMF_DATETIME_ISO8601_FMT )
323332
324-
325-
326333 # base global metadata
327334 global_md = {
328335 SigMFFile .AUTHOR_KEY : getpass .getuser (),
@@ -336,7 +343,7 @@ def _build_metadata(xml_path: Path) -> Tuple[dict, dict, list, int]:
336343
337344 # add optional rohdeschwarz-specific fields to global metadata using rohdeschwarz: namespace
338345 # only include fields that aren't already represented in standard SigMF metadata
339- if scaling_factor :
346+ if scaling_factor is not None :
340347 global_md ["rohdeschwarz:scaling_factor" ] = scaling_factor
341348 if datafilename :
342349 global_md ["rohdeschwarz:iq_datafilename" ] = datafilename # provenance
0 commit comments