
AOSP10 के लिए Expat XML पार्सर का पैच किया गया संस्करण, CVE-2022-25236 को संबोधित करता है। भेद्यता विश्लेषण और फिक्स की शैक्षिक समीक्षा के लिए स्रोत कोड प्रदान करता है।
यह Expat है, XML को पार्स करने के लिए एक C लाइब्रेरी, जिसे जेम्स क्लार्क ने 1997 में शुरू किया था। Expat एक स्ट्रीम-ओरिएंटेड XML पार्सर है। इसका मतलब है कि आप पार्स शुरू करने से पहले पार्सर के साथ हैंडलर पंजीकृत करते हैं। ये हैंडलर तब कॉल किए जाते हैं जब पार्सर पार्स किए जा रहे दस्तावेज़ में संबंधित संरचनाओं की खोज करता है। एक स्टार्ट टैग उन संरचनाओं का एक उदाहरण है जिनके लिए आप हैंडलर पंजीकृत कर सकते हैं।
विंडोज उपयोगकर्ताओं को expat_win32 पैकेज का उपयोग करना चाहिए, जिसमें प्रीकंपाइल्ड लाइब्रेरीज़ और एक्जीक्यूटेबल्स, और डेवलपर्स के लिए स्रोत कोड शामिल हैं।
Expat मुफ्त सॉफ्टवेयर है।
आप इस पैकेज के साथ वितरित फ़ाइल
COPYING में निहित लाइसेंस की शर्तों के तहत इसे कॉपी, वितरित और संशोधित कर सकते हैं।
यह लाइसेंस MIT/X Consortium लाइसेंस के समान है।
यदि आप Git रिपॉजिटरी से चेक-आउट से Expat बना रहे हैं, तो आपको एक स्क्रिप्ट चलाने की आवश्यकता है जो GNU autoconf और libtool टूल का उपयोग करके configure स्क्रिप्ट उत्पन्न करती है। ऐसा करने के लिए, आपके पास autoconf 2.58 या नया होना चाहिए। स्क्रिप्ट को इस प्रकार चलाएं:
./buildconf.sh
एक बार ऐसा करने के बाद, स्रोत वितरण से बनाने के समान निर्देशों का पालन करें।
स्रोत वितरण से Expat बनाने के लिए, आप पहले शीर्ष स्तर के वितरण निर्देशिका में कॉन्फ़िगरेशन शेल स्क्रिप्ट चलाते हैं:
./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 के साथ कॉन्फ़िगर करते हैं क्योंकि xmlwf अभी तक संकलन के इस मोड का समर्थन नहीं करता है:
लाइब्रेरी नाम के लिए libexpatw.la का उपयोग करने के लिए Makefile.am फ़ाइलों को मास-पैच करें:
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 के रूप में (और संस्करण/त्रुटि स्ट्रिंग्स char के रूप में) चलाएं:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
UTF-16 आउटपुट के लिए wchar_t के रूप में (incl. संस्करण/त्रुटि स्ट्रिंग्स) चलाएं:
./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 को ओवरराइड करता है, क्योंकि वेरिएबल-सेटिंग प्राथमिकता है
नोट: यह केवल Expat लाइब्रेरी पर लागू होता है, xmlwf और परीक्षणों के UTF-16 संस्करण बनाना वर्तमान में समर्थित नहीं है।
जब autoconf का उपयोग करने वाले प्रोजेक्ट के साथ Expat का उपयोग करते हैं, तो आप Expat को शामिल करने का तरीका निर्धारित करने के लिए conftools/expat.m4 में प्रोबिंग मैक्रो का उपयोग कर सकते हैं। अधिक जानकारी के लिए उस फ़ाइल के शीर्ष पर टिप्पणियाँ देखें।
एक संदर्भ मैनुअल इस वितरण में doc/reference.html फ़ाइल में उपलब्ध है।