rpms/mingw32-libxslt/devel libxslt-1.1.25-locking.patch, NONE, 1.1 mingw32-libxslt.spec, 1.5, 1.6

epienbro epienbro at fedoraproject.org
Mon Sep 21 21:45:50 UTC 2009


Author: epienbro

Update of /cvs/pkgs/rpms/mingw32-libxslt/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv15587

Modified Files:
	mingw32-libxslt.spec 
Added Files:
	libxslt-1.1.25-locking.patch 
Log Message:
Fix a locking bug in 1.1.25 (patch from native libxslt package)


libxslt-1.1.25-locking.patch:
 extensions.c |   34 ++++++++++++++++++++++------------
 1 file changed, 22 insertions(+), 12 deletions(-)

--- NEW FILE libxslt-1.1.25-locking.patch ---
commit 2e8defa7ccef2f76fb1cbfe9e9673d8e4b6cf1d6
Author: Daniel Veillard <veillard at redhat.com>
Date:   Sun Sep 20 11:51:52 2009 +0200

    595612 Try to fix some locking problems
    
    * libxslt/extensions.c: there were still cases where the normal
      code path could led to trying to mtake again the extension lock
      go over all entry points of the module and clean things up

diff --git a/libxslt/extensions.c b/libxslt/extensions.c
index ebb81f5..6187b7a 100644
--- a/libxslt/extensions.c
+++ b/libxslt/extensions.c
@@ -313,8 +313,6 @@ typedef void (*exsltRegisterFunction) (void);
  * by LIBXSLT_DEFAULT_PLUGINS_PATH() which is determined at
  * compile time.
  *
- * Always called with xsltExtMutex lock taken.
- *
  * Returns 0 if successful, -1 in case of error. 
  */
 
@@ -550,10 +548,14 @@ xsltRegisterExtPrefix(xsltStylesheetPtr style,
     if (xsltExtensionsHash != NULL) {
         xsltExtModulePtr module;
 
+        xmlMutexLock(xsltExtMutex);
         module = xmlHashLookup(xsltExtensionsHash, URI);
+        xmlMutexUnlock(xsltExtMutex);
         if (NULL == module) {
             if (!xsltExtModuleRegisterDynamic(URI)) {
+                xmlMutexLock(xsltExtMutex);
                 module = xmlHashLookup(xsltExtensionsHash, URI);
+                xmlMutexUnlock(xsltExtMutex);
             }
         }
         if (module != NULL) {
@@ -1669,18 +1671,13 @@ xsltExtElementLookup(xsltTransformContextPtr ctxt,
     if ((name == NULL) || (URI == NULL))
         return (NULL);
 
-    xmlMutexLock(xsltExtMutex);
-
     if ((ctxt != NULL) && (ctxt->extElements != NULL)) {
         XML_CAST_FPTR(ret) = xmlHashLookup2(ctxt->extElements, name, URI);
         if (ret != NULL) {
-            xmlMutexUnlock(xsltExtMutex);
             return(ret);
         }
     }
 
-    xmlMutexUnlock(xsltExtMutex);
-
     ret = xsltExtModuleElementLookup(name, URI);
 
     return (ret);
@@ -1707,19 +1704,23 @@ xsltExtModuleElementLookup(const xmlChar * name, const xmlChar * URI)
 
     ext = (xsltExtElementPtr) xmlHashLookup2(xsltElementsHash, name, URI);
 
+    xmlMutexUnlock(xsltExtMutex);
+
     /*
      * if function lookup fails, attempt a dynamic load on
      * supported platforms
      */
     if (NULL == ext) {
         if (!xsltExtModuleRegisterDynamic(URI)) {
+            xmlMutexLock(xsltExtMutex);
+
             ext = (xsltExtElementPtr)
 	          xmlHashLookup2(xsltElementsHash, name, URI);
+
+            xmlMutexUnlock(xsltExtMutex);
         }
     }
 
-    xmlMutexUnlock(xsltExtMutex);
-
     if (ext == NULL)
         return (NULL);
     return (ext->transform);
@@ -1747,13 +1748,18 @@ xsltExtModuleElementPreComputeLookup(const xmlChar * name,
 
     ext = (xsltExtElementPtr) xmlHashLookup2(xsltElementsHash, name, URI);
 
+    xmlMutexUnlock(xsltExtMutex);
+
     if (ext == NULL) {
         if (!xsltExtModuleRegisterDynamic(URI)) {
+            xmlMutexLock(xsltExtMutex);
+
             ext = (xsltExtElementPtr)
 	          xmlHashLookup2(xsltElementsHash, name, URI);
+
+            xmlMutexUnlock(xsltExtMutex);
         }
     }
-    xmlMutexUnlock(xsltExtMutex);
 
     if (ext == NULL)
         return (NULL);
@@ -1856,15 +1862,19 @@ xsltExtModuleTopLevelLookup(const xmlChar * name, const xmlChar * URI)
 
     XML_CAST_FPTR(ret) = xmlHashLookup2(xsltTopLevelsHash, name, URI);
 
+    xmlMutexUnlock(xsltExtMutex);
+
     /* if lookup fails, attempt a dynamic load on supported platforms */
     if (NULL == ret) {
         if (!xsltExtModuleRegisterDynamic(URI)) {
+            xmlMutexLock(xsltExtMutex);
+
             XML_CAST_FPTR(ret) = xmlHashLookup2(xsltTopLevelsHash, name, URI);
+
+            xmlMutexUnlock(xsltExtMutex);
         }
     }
 
-    xmlMutexUnlock(xsltExtMutex);
-
     return (ret);
 }
 


Index: mingw32-libxslt.spec
===================================================================
RCS file: /cvs/pkgs/rpms/mingw32-libxslt/devel/mingw32-libxslt.spec,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- mingw32-libxslt.spec	17 Sep 2009 17:48:25 -0000	1.5
+++ mingw32-libxslt.spec	21 Sep 2009 21:45:50 -0000	1.6
@@ -7,7 +7,7 @@
 
 Name:           mingw32-libxslt
 Version:        1.1.25
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        MinGW Windows Library providing the Gnome XSLT engine
 
 License:        MIT
@@ -18,6 +18,8 @@ BuildRoot:      %{_tmppath}/%{name}-%{ve
 
 BuildArch:      noarch
 
+Patch1:         libxslt-1.1.25-locking.patch
+
 # Fix compilation on MinGW environments
 Patch1000:      mingw32-libxslt-dont-use-pthread.patch
 
@@ -61,6 +63,8 @@ Static version of the MinGW Windows LibX
 # this isn't interesting for MinGW environments
 #%patch0 -p1
 
+%patch1 -p1
+
 %patch1000 -p1
 
 libtoolize --force --copy
@@ -112,6 +116,9 @@ rm -rf $RPM_BUILD_ROOT
 
 
 %changelog
+* Mon Sep 21 2009 Erik van Pienbroek <epienbro at fedoraproject.org> - 1.1.25-2
+- Fix a locking bug in 1.1.25 (patch from native libxslt package)
+
 * Thu Sep 17 2009 Erik van Pienbroek <epienbro at fedoraproject.org> - 1.1.25-1
 - Update to 1.1.25
 - Dropped upstreamed CVE patch




More information about the fedora-extras-commits mailing list