
सी लाइब्रेरी XML पार्स करने के लिए, CVE-2022-25235 के लिए पैच की गई, जो हैंडलर पंजीकरण और बिल्ड कॉन्फ़िगरेशन विकल्पों के साथ स्ट्रीम-उन्मुख पार्सिंग प्रदान करती है।
यह Expat है, XML पार्स करने के लिए एक C लाइब्रेरी, जिसे James Clark ने 1997 में शुरू किया था। Expat एक स्ट्रीम-ओरिएंटेड XML पार्सर है। इसका मतलब है कि आप पार्स शुरू करने से पहले पार्सर के साथ हैंडलर पंजीकृत करते हैं। जब पार्सर पार्स किए जा रहे दस्तावेज़ में संबंधित संरचनाओं का पता लगाता है, तो ये हैंडलर कॉल किए जाते हैं। एक प्रारंभ टैग (start tag) उस प्रकार की संरचनाओं का एक उदाहरण है जिसके लिए आप हैंडलर पंजीकृत कर सकते हैं।
Windows उपयोगकर्ताओं को expat_win32 package का उपयोग करना चाहिए, जिसमें प्रीकंपाइल्ड लाइब्रेरी और एक्ज़ीक्यूटेबल दोनों शामिल हैं, साथ ही डेवलपर्स के लिए सोर्स कोड भी शामिल है।
Expat मुक्त सॉफ़्टवेयर है।
आप इस पैकेज के साथ वितरित फ़ाइल COPYING में निहित लाइसेंस की शर्तों के तहत इसे कॉपी, वितरित और संशोधित कर सकते हैं।
यह लाइसेंस MIT/X Consortium लाइसेंस के समान है।
यदि आप Git repository से चेक-आउट से 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 के साथ कॉन्फ़िगर करते हैं क्योंकि 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
अहस्ताक्षरित short के रूप में UTF-16 आउटपुट (और संस्करण/त्रुटि स्ट्रिंग 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 में उपलब्ध है।