تقنية

loads في بايثون: هل نجاح القراءة يثبت فحص كل البايتات؟

تمثيل القائمة ثم EXTRA يعطي القائمة سبعة
إضافة محلية بعد كائن كامل. [1] [2]

قد تنجح القراءة مع بايتات إضافية بعد الكائن. [1] [2]

الخلاصة السريعة

تتجاهل loads البايتات اللاحقة لتمثيل الكائن؛ النجاح لا يثبت فحص المدخل كله. [1] [2]

  • ننشئ بيانات المثال محليًا. [1] [2]
  • نحدد protocol=0 صراحة. [1] [2]
  • نضيف EXTRA بعد التمثيل الكامل. [1] [2]
  • الناتج [7] دون رفض الإضافة. [1] [2]
  • اختبرنا 3.12.14؛ لا تحمّل بيانات مجهولة الثقة. [1] [2]

المثال

import pickle as p
a=p.dumps([7],protocol=0)
b=a+b'EXTRA'
print(p.loads(b))

[1] [2]

تعيد dumps بايتات التمثيل؛ تعيد loads الكائن. [1] [2]

أين تنتهي القراءة؟

في التنفيذ المكتوب ببايثون، تنهي STOP القراءة بإرجاع القيمة. [1] [2]

STOP تعيد القيمة والبايتات اللاحقة تتجاهل
المسار البديل المكتوب ببايثون. [1] [2]

هذا شرح للمسار البديل؛ قد يستعمل التنفيذ العام مسرّعًا بلغة C. [1] [2]

ما الذي لا تثبته النتيجة؟

لا تثبت صلاحية البايتات اللاحقة. اختبارنا يخص قوائم أنشأناها، وليس ضمانًا لأمان التحميل. [1] [2]

المراجع

  1. Python: pickle
  2. CPython 3.12.14: pickle.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.