fixed two memory leaks, one in exsltMathConstant and one in
authorWilliam M. Brack <wbrack@src.gnome.org>
Sun, 6 May 2007 15:43:22 +0000 (15:43 +0000)
committerWilliam M. Brack <wbrack@src.gnome.org>
Sun, 6 May 2007 15:43:22 +0000 (15:43 +0000)
* libexslt/math.c: fixed two memory leaks, one in exsltMathConstant
  and one in exsltMathConstantFunction (bug #436324)

svn path=/trunk/; revision=1427

ChangeLog
libexslt/math.c

index 30e885b..110feee 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sun May  6 23:42:38 HKT 2007 William Brack <wbrack@mmm.com.hk>
+
+       * libexslt/math.c: fixed two memory leaks, one in exsltMathConstant
+         and one in exsltMathConstantFunction (bug #436324)
+
 Fri May  4 15:51:58 HKT 2007 William Brack <wbrack@mmm.com.hk>
 
        * libxslt/transform.c: fixed xpath context housekeeping problem
index 50a4e6a..5c5720d 100644 (file)
@@ -357,6 +357,7 @@ exsltMathLowestFunction (xmlXPathParserContextPtr ctxt, int nargs) {
 static double
 exsltMathConstant (xmlChar *name, double precision) {
     xmlChar *str;
+    double ret;
 
     if ((name == NULL) || (xmlXPathIsNaN(precision)) || (precision < 1.0)) {
         return xmlXPathNAN;
@@ -369,10 +370,6 @@ exsltMathConstant (xmlChar *name, double precision) {
             len = (int)precision;
         
         str = xmlStrsub(EXSLT_PI, 0, len);
-        if (str == NULL)
-            return xmlXPathNAN;
-
-        return xmlXPathCastStringToNumber(str);
 
     } else if (xmlStrEqual(name, BAD_CAST "E")) {
         int len = xmlStrlen(EXSLT_E);
@@ -381,10 +378,6 @@ exsltMathConstant (xmlChar *name, double precision) {
             len = (int)precision;
         
         str = xmlStrsub(EXSLT_E, 0, len);
-        if (str == NULL)
-            return xmlXPathNAN;
-
-        return xmlXPathCastStringToNumber(str);
 
     } else if (xmlStrEqual(name, BAD_CAST "SQRRT2")) {
         int len = xmlStrlen(EXSLT_SQRRT2);
@@ -393,10 +386,6 @@ exsltMathConstant (xmlChar *name, double precision) {
             len = (int)precision;
         
         str = xmlStrsub(EXSLT_SQRRT2, 0, len);
-        if (str == NULL)
-            return xmlXPathNAN;
-
-        return xmlXPathCastStringToNumber(str);
 
     } else if (xmlStrEqual(name, BAD_CAST "LN2")) {
         int len = xmlStrlen(EXSLT_LN2);
@@ -405,10 +394,6 @@ exsltMathConstant (xmlChar *name, double precision) {
             len = (int)precision;
         
         str = xmlStrsub(EXSLT_LN2, 0, len);
-        if (str == NULL)
-            return xmlXPathNAN;
-
-        return xmlXPathCastStringToNumber(str);
 
     } else if (xmlStrEqual(name, BAD_CAST "LN10")) {
         int len = xmlStrlen(EXSLT_LN10);
@@ -417,10 +402,6 @@ exsltMathConstant (xmlChar *name, double precision) {
             len = (int)precision;
         
         str = xmlStrsub(EXSLT_LN10, 0, len);
-        if (str == NULL)
-            return xmlXPathNAN;
-
-        return xmlXPathCastStringToNumber(str);
 
     } else if (xmlStrEqual(name, BAD_CAST "LOG2E")) {
         int len = xmlStrlen(EXSLT_LOG2E);
@@ -429,10 +410,6 @@ exsltMathConstant (xmlChar *name, double precision) {
             len = (int)precision;
         
         str = xmlStrsub(EXSLT_LOG2E, 0, len);
-        if (str == NULL)
-            return xmlXPathNAN;
-
-        return xmlXPathCastStringToNumber(str);
 
     } else if (xmlStrEqual(name, BAD_CAST "SQRT1_2")) {
         int len = xmlStrlen(EXSLT_SQRT1_2);
@@ -441,14 +418,15 @@ exsltMathConstant (xmlChar *name, double precision) {
             len = (int)precision;
         
         str = xmlStrsub(EXSLT_SQRT1_2, 0, len);
-        if (str == NULL)
-            return xmlXPathNAN;
-
-        return xmlXPathCastStringToNumber(str);
 
     } else {
+       str = NULL;
+    }
+    if (str == NULL)
         return xmlXPathNAN;
-    } 
+    ret = xmlXPathCastStringToNumber(str);
+    xmlFree(str);
+    return ret;
 }
 
 /**
@@ -476,6 +454,8 @@ exsltMathConstantFunction (xmlXPathParserContextPtr ctxt, int nargs) {
        return;
 
     ret = exsltMathConstant(name, ret);
+    if (name != NULL)
+       xmlFree(name);
 
     xmlXPathReturnNumber(ctxt, ret);
 }