Skip to content

Commit c0d9728

Browse files
committed
Add support for Python 3.12+ Tar extract filter
1 parent 0f3dbe6 commit c0d9728

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

platformio/package/unpack.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# limitations under the License.
1414

1515
import os
16+
import sys
1617
from tarfile import open as tarfile_open
1718
from time import mktime
1819
from zipfile import ZipFile
@@ -82,19 +83,23 @@ def is_bad_link(self, item, base):
8283
).startswith(base)
8384

8485
def extract_item(self, item, dest_dir):
86+
if sys.version_info >= (3, 12):
87+
self._afo.extract(item, dest_dir, filter="data")
88+
return self.after_extract(item, dest_dir)
89+
90+
# apply custom security logic
8591
dest_dir = self.resolve_path(dest_dir)
8692
bad_conds = [
8793
self.is_bad_path(item.name, dest_dir),
8894
self.is_link(item) and self.is_bad_link(item, dest_dir),
8995
]
90-
if not any(bad_conds):
91-
super().extract_item(item, dest_dir)
92-
else:
93-
click.secho(
96+
if any(bad_conds):
97+
return click.secho(
9498
"Blocked insecure item `%s` from TAR archive" % item.name,
9599
fg="red",
96100
err=True,
97101
)
102+
return super().extract_item(item, dest_dir)
98103

99104

100105
class ZIPArchiver(BaseArchiver):

0 commit comments

Comments
 (0)