
مكتبة C لتحليل XML، تم تصحيحها خصيصًا لـ CVE-2022-23990، توفر تنفيذًا مرجعيًا لتحليل الثغرات وممارسات البرمجة الآمنة.
هذه هي مكتبة إكسبات (Expat)، وهي مكتبة بلغة سي لتحليل XML، بدأها James Clark في عام 1997. إكسبات هو محلل XML موجه للتيار. وهذا يعني أنك تسجل معالجات (handlers) مع المحلل قبل بدء التحليل. يتم استدعاء هذه المعالجات عندما يكتشف المحلل الهياكل المرتبطة في المستند الذي يتم تحليله. علامة البداية هي مثال على نوع الهياكل التي يمكنك تسجيل معالجات لها.
يجب على مستخدمي ويندوز استخدام expat_win32 حزمة، والتي تتضمن كلاً من المكتبات المُجمَّعة مسبقًا والملفات التنفيذية، والكود المصدري للمطورين.
إكسبات هو برمجيات حرة. يمكنك نسخه وتوزيعه وتعديله بموجب شروط الترخيص المضمنة في الملف COPYING الموزع مع هذه الحزمة. هذا الترخيص هو نفسه ترخيص MIT/X Consortium.
إذا كنت تقوم ببناء إكسبات من استخراج من مستودع Git، فأنت بحاجة إلى تشغيل نص برمجي يقوم بتوليد نص التهيئة (configure script) باستخدام أدوات GNU autoconf و libtool. للقيام بذلك، يجب أن يكون لديك autoconf 2.58 أو أحدث. قم بتشغيل النص البرمجي كما يلي:
./buildconf.sh
بمجرد الانتهاء من ذلك، اتبع نفس التعليمات المتبعة للبناء من توزيعة المصدر.
لبناء إكسبات من توزيعة المصدر، قم أولاً بتشغيل نص شل التهيئة في دليل التوزيعة الرئيسي:
./configure
هناك العديد من الخيارات التي يمكنك تقديمها لـ configure (والتي يمكنك اكتشافها عن طريق تشغيل configure مع خيار --help). لكن الأكثر أهمية هو الخيار الذي يحدد دليل التثبيت. افتراضيًا، سيقوم نص التهيئة بإعداد الأمور لتثبيت libexpat في /usr/local/lib، و expat.h في /usr/local/include، و xmlwf في /usr/local/bin. إذا كنت تفضل، على سبيل المثال، التثبيت في /home/me/mystuff/lib و /home/me/mystuff/include و /home/me/mystuff/bin، يمكنك إخبار configure بذلك عن طريق:
./configure --prefix=/home/me/mystuff
خيار آخر مثير للاهتمام هو تمكين دعم الأعداد الصحيحة 64 بت لأرقام الأسطر والأعمدة وفهرس البايت الكلي:
./configure CPPFLAGS=-DXML_LARGE_SIZE
ومع ذلك، فإن مثل هذا التعديل سيكون تغييرًا مكسّرًا لـ ABI وبالتالي لا يُنصح به للاستخدام العام — على سبيل المثال كجزء من توزيعة لينكس — بل للبنى ذات المتطلبات الخاصة.
بعد تشغيل نص التهيئة، سيقوم أمر make ببناء الأشياء و make install بتثبيتها في موقعها المناسب. ألقِ نظرة على Makefile لمعرفة خيارات make الإضافية. لاحظ أنك تحتاج إلى إذن كتابة في الدلائل التي سيتم تثبيت الأشياء فيها.
إذا كنت مهتمًا ببناء إكسبات لتوفير معلومات المستند بترميز UTF-16 بدلاً من UTF-8 الافتراضي، اتبع هذه التعليمات (بعد تشغيل make distclean). يرجى ملاحظة أننا نقوم بالتكوين باستخدام --without-xmlwf لأن xmlwf لا يدعم وضع الترجمة هذا (حتى الآن):
قم بتصحيح جماعي لملفات Makefile.am لاستخدام libexpatw.la كاسم للمكتبة:
find -name Makefile.am -exec sed -e 's,libexpat\.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i {} +
قم بتشغيل automake لإعادة كتابة ملفات Makefile.in:
automake
لإخراج UTF-16 كـ unsigned short (وسلاسل الإصدار/الخطأ كـ char)، قم بتشغيل:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
لإخراج UTF-16 كـ wchar_t (بما في ذلك سلاسل الإصدار/الخطأ)، قم بتشغيل:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
ملاحظة: يتطلب الأخير مكتبة libc مُجمَّعة مع -fshort-wchar أيضًا.
قم بتشغيل make (الذي يستثني xmlwf).
قم بتشغيل make install (مرة أخرى، يستثني xmlwf).
استخدام DESTDIR مدعوم. يعمل كما يلي:
make install DESTDIR=/path/to/image
يتجاوز DESTDIR المُعيَّن داخل ملف makefile، لأن أولوية تعيين المتغير هي
ملاحظة: ينطبق هذا فقط على مكتبة إكسبات نفسها، بناء إصدارات UTF-16 من xmlwf والاختبارات غير مدعوم حاليًا.
عند استخدام إكسبات مع مشروع يستخدم autoconf للتكوين، يمكنك استخدام الماكرو الاستقصائي في conftools/expat.m4 لتحديد كيفية تضمين إكسبات. راجع التعليقات في أعلى هذا الملف لمزيد من المعلومات.
يتوفر دليل مرجعي في الملف doc/reference.html في هذه التوزيعة.