
Expat XML पार्सर लाइब्रेरी का पैच किया गया संस्करण, जो AOSP 10 r33 के लिए कई CVEs (CVE-2022-22822 से CVE-2022-22827 तक) को संबोधित करता है, सुरक्षा सुधारों के साथ स्ट्रीम-ओरिएंटेड XML पार्सिंग प्रदान करता है।
यह Expat है, जो XML पार्स करने के लिए एक C लाइब्रेरी है, जिसे James Clark ने 1997 में शुरू किया था। Expat एक स्ट्रीम-ओरिएंटेड XML पार्सर है। इसका मतलब है कि आप पार्स शुरू करने से पहले पार्सर के साथ हैंडलर पंजीकृत करते हैं। ये हैंडलर तब कॉल किए जाते हैं जब पार्सर को पार्स किए जा रहे दस्तावेज़ में संबंधित संरचनाएँ मिलती हैं। एक स्टार्ट टैग उन संरचनाओं का एक उदाहरण है जिनके लिए आप हैंडलर पंजीकृत कर सकते हैं।
Windows उपयोगकर्ताओं को expat_win32 पैकेज का उपयोग करना चाहिए, जिसमें प्रीकंपाइल्ड लाइब्रेरी और एक्ज़ीक्यूटेबल, साथ ही डेवलपर्स के लिए सोर्स कोड दोनों शामिल हैं।
Expat मुक्त सॉफ़्टवेयर है। आप इस पैकेज के साथ वितरित COPYING फ़ाइल में निहित लाइसेंस की शर्तों के तहत इसे कॉपी, वितरित और संशोधित कर सकते हैं। यह लाइसेंस MIT/X Consortium लाइसेंस के समान है।
यदि आप Git रिपॉज़िटरी से चेक-आउट से Expat बना रहे हैं, तो आपको एक स्क्रिप्ट चलाने की आवश्यकता है जो GNU autoconf और libtool उपकरणों का उपयोग करके configure स्क्रिप्ट उत्पन्न करती है। ऐसा करने के लिए, आपके पास autoconf 2.58 या नया होना चाहिए। स्क्रिप्ट को इस प्रकार चलाएँ:
./buildconf.sh
ऐसा करने के बाद, सोर्स डिस्ट्रीब्यूशन से बनाने के समान निर्देशों का पालन करें।
Expat को सोर्स डिस्ट्रीब्यूशन से बनाने के लिए, आप सबसे पहले टॉप-लेवल डिस्ट्रीब्यूशन निर्देशिका में कॉन्फ़िगरेशन शेल स्क्रिप्ट चलाते हैं:
./configure
configure को कई विकल्प दिए जा सकते हैं (जिन्हें आप --help विकल्प के साथ configure चलाकर खोज सकते हैं)। लेकिन सबसे दिलचस्प विकल्प वह है जो इंस्टॉलेशन निर्देशिका निर्धारित करता है। डिफ़ॉल्ट रूप से, configure स्क्रिप्ट 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 के लिए एक ब्रेकिंग परिवर्तन होगा और इसलिए सामान्य उपयोग के लिए अनुशंसित नहीं है — जैसे कि Linux डिस्ट्रीब्यूशन के हिस्से के रूप में — बल्कि विशेष आवश्यकताओं वाले बिल्ड्स के लिए है।
configure स्क्रिप्ट चलाने के बाद, make कमांड चीज़ों को बिल्ड करेगा और make install उन्हें उनके उचित स्थान पर इंस्टॉल करेगा। अतिरिक्त make विकल्पों के बारे में जानने के लिए Makefile देखें। ध्यान दें कि जिन निर्देशिकाओं में चीज़ें इंस्टॉल की जाएंगी, उनमें आपके पास लेखन अनुमति होनी चाहिए।
यदि आप डिफ़ॉल्ट UTF-8 के बजाय UTF-16 एन्कोडिंग में दस्तावेज़ जानकारी प्रदान करने के लिए Expat बनाने में रुचि रखते हैं, तो इन निर्देशों का पालन करें (make distclean चलाने के बाद)। कृपया ध्यान दें कि हम --without-xmlwf के साथ configure करते हैं क्योंकि xmlwf अभी तक संकलन के इस मोड का समर्थन नहीं करता है:
Makefile.am फ़ाइलों को libexpatw.la को लाइब्रेरी नाम के रूप में उपयोग करने के लिए मास-पैच करें:
find -name Makefile.am -exec sed -e 's,libexpat\.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i {} +
Makefile.in फ़ाइलों को फिर से लिखने के लिए automake चलाएँ:
automake
UTF-16 आउटपुट को unsigned short के रूप में (और version/error स्ट्रिंग्स को char के रूप में) प्राप्त करने के लिए, चलाएँ:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
UTF-16 आउटपुट को wchar_t के रूप में (incl. version/error स्ट्रिंग्स) प्राप्त करने के लिए, चलाएँ:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
नोट: बाद वाले के लिए -fshort-wchar के साथ संकलित libc की भी आवश्यकता होती है।
make चलाएँ (जो xmlwf को बाहर रखता है)।
make install चलाएँ (फिर से, xmlwf को बाहर रखता है)।
DESTDIR का उपयोग समर्थित है। यह इस प्रकार काम करता है:
make install DESTDIR=/path/to/image
इन-मेकफ़ाइल में सेट DESTDIR को ओवरराइड करता है, क्योंकि वेरिएबल-सेटिंग प्राथमिकता है:
नोट: यह केवल Expat लाइब्रेरी पर ही लागू होता है; xmlwf और परीक्षणों के UTF-16 संस्करण बनाना वर्तमान में समर्थित नहीं है।
जब Expat को कॉन्फ़िगरेशन के लिए autoconf का उपयोग करने वाले प्रोजेक्ट के साथ उपयोग कर रहे हों, तो आप Expat को शामिल करने का तरीका निर्धारित करने के लिए conftools/expat.m4 में प्रोबिंग मैक्रो का उपयोग कर सकते हैं। अधिक जानकारी के लिए उस फ़ाइल के शीर्ष पर टिप्पणियाँ देखें।
एक संदर्भ मैनुअल इस डिस्ट्रीब्यूशन में doc/reference.html फ़ाइल में उपलब्ध है।