Implementation classes named in table properties are imported and instantiated without a type check

Đang mở
#3,932 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
68/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
security

Hướng nghiên cứu

Bắt đầu với _import_file_io trong pyiceberg/io/init.py, _import_location_provider trong pyiceberg/table/locations.py và _import_retry_strategy trong pyiceberg/io/pyarrow.py. Theo dõi cách từng thuộc tính được phân giải và gọi, sau đó xác minh rằng chỉ các lớp con của FileIO, LocationProvider hoặc S3RetryStrategy được chấp nhận trước khi khởi tạo; hoàn tất nghĩa là cả ba đường dẫn đều từ chối các lớp có thể import không liên quan.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

bug

Three properties name a class that PyIceberg imports and calls:

Property Resolved by Called as
py-io-impl _import_file_io (pyiceberg/io/__init__.py) class_(properties)
write.py-location-provider.impl _import_location_provider (pyiceberg/table/locations.py) class_(table_location, table_properties)
s3.retry-strategy-impl _import_retry_strategy (pyiceberg/io/pyarrow.py) class_()

Each follows the same pattern:

module = importlib.import_module(module_name)
class_ = getattr(module, class_name)
return class_(...)

None of the three checks that the resolved object is the type it is about to be used as — there is no issubclass against FileIO, LocationProvider, or S3RetryStrategy. Any importable dotted name resolves and is called, with the property map passed as an argument in two of the three cases.

All three properties are read from the merged table property map, so their values can originate in a table's metadata rather than in the operator's catalog configuration.


Issue investigation generated via claude, reviewed by Sung, Kevin, Fokko.

Ngôn ngữ chính
Python
Star
1.1k
Fork
589
Merge trung bình
2 ngày 4 giờ
Pull request đã merge (30 ngày)
72

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của apache/iceberg-python

Tất cả issue của apache/iceberg-python

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.