
XML पार्स करने के लिए C लाइब्रेरी, CVE-2022-25315 के लिए पैच किया गया, कुशल दस्तावेज़ प्रोसेसिंग के लिए हैंडलर के साथ स्ट्रीम-ओरिएंटेड XML पार्सिंग प्रदान करता है।
यह Expat है, जो XML पार्स करने के लिए एक C लाइब्रेरी है, जिसे 1997 में James Clark ने शुरू किया था। Expat एक स्ट्रीम-उन्मुख XML पार्सर है। इसका मतलब है कि आप पार्सिंग शुरू करने से पहले पार्सर के साथ हैंडलर पंजीकृत करते हैं। ये हैंडलर तब कॉल किए जाते हैं जब पार्सर दस्तावेज़ में संबंधित संरचनाओं का पता लगाता है जिसे पार्स किया जा रहा है। एक प्रारंभ टैग उस प्रकार की संरचनाओं का एक उदाहरण है जिसके लिए आप हैंडलर पंजीकृत कर सकते हैं।
विंडोज उपयोगकर्ताओं को expat_win32 पैकेज का उपयोग करना चाहिए, जिसमें प्रीकंपाइल्ड लाइब्रेरी और एक्जीक्यूटेबल्स के साथ-साथ डेवलपर्स के लिए स्रोत कोड शामिल है।
Expat मुफ्त सॉफ्टवेयर है। आप इस पैकेज के साथ वितरित COPYING फ़ाइल में निहित लाइसेंस की शर्तों के तहत इसकी प्रतिलिपि, वितरण और संशोधन कर सकते हैं। यह लाइसेंस MIT/X Consortium लाइसेंस के समान है।
यदि आप Git रिपॉजिटरी से चेक-आउट से Expat का निर्माण कर रहे हैं, तो आपको एक स्क्रिप्ट चलाने की आवश्यकता है जो GNU autoconf और libtool टूल का उपयोग करके configure स्क्रिप्ट उत्पन्न करती है। ऐसा करने के लिए, आपके पास autoconf 2.58 या नया होना चाहिए। स्क्रिप्ट को इस प्रकार चलाएं:
./buildconf.sh
एक बार ऐसा करने के बाद, स्रोत वितरण से निर्माण करने के लिए समान निर्देशों का पालन करें।
स्रोत वितरण से Expat बनाने के लिए, आप पहले शीर्ष स्तर के वितरण निर्देशिका में कॉन्फ़िगरेशन शेल स्क्रिप्ट चलाते हैं:
./configure
configure को प्रदान करने के लिए कई विकल्प हैं (जिन्हें आप --help विकल्प के साथ configure चलाकर खोज सकते हैं)। लेकिन सबसे अधिक रुचि का वह है जो इंस्टॉलेशन निर्देशिका सेट करता है। डिफ़ॉल्ट रूप से, configure स्क्रिप्ट चीजों को /usr/local/lib में libexpat, /usr/local/include में expat.h, और /usr/local/bin में xmlwf स्थापित करने के लिए सेट करेगी। यदि, उदाहरण के लिए, आप /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 के रूप में (और संस्करण/त्रुटि स्ट्रिंग्स char के रूप में), चलाएं:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
wchar_t के रूप में UTF-16 आउटपुट (संस्करण/त्रुटि स्ट्रिंग्स सहित) के लिए, चलाएं:
./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 फ़ाइल में उपलब्ध है।