[PATCH 6/6] msxml3: better error handling for XSLPattern_to_XPath()

Adam Martinson amartinson at codeweavers.com
Mon Sep 27 20:16:44 CDT 2010


---
 dlls/msxml3/xslpattern.h |    3 ++-
 dlls/msxml3/xslpattern.l |   12 +++++++++++-
 dlls/msxml3/xslpattern.y |    6 ++++--
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/dlls/msxml3/xslpattern.h b/dlls/msxml3/xslpattern.h
index 7b7cd7f..89ea199 100644
--- a/dlls/msxml3/xslpattern.h
+++ b/dlls/msxml3/xslpattern.h
@@ -40,6 +40,7 @@ typedef struct _parser_param {
     int pos;
     int len;
     xmlChar* out;
+    int err;
 } parser_param;
 
 #define YYSTYPE xmlChar*
@@ -50,6 +51,6 @@ int  xslpattern_lex_init(void**);
 int  xslpattern_lex_destroy(void*);
 void xslpattern_set_extra(parser_param*, void*);
 int  xslpattern_parse(parser_param*, void*);
-inline void xslpattern_error(parser_param const* param, void const* scanner, char const* msg);
+inline void xslpattern_error(parser_param* param, void const* scanner, char const* msg);
 
 #endif /* __XSLPATTERN__ */
diff --git a/dlls/msxml3/xslpattern.l b/dlls/msxml3/xslpattern.l
index b21ec0e..1a5060d 100644
--- a/dlls/msxml3/xslpattern.l
+++ b/dlls/msxml3/xslpattern.l
@@ -166,7 +166,17 @@ xmlChar* XSLPattern_to_XPath(xmlChar const* xslpat_str)
 
     TRACE("=> %s\n", wine_dbgstr_a((char const*)p.out));
     xslpattern_lex_destroy(p.yyscanner);
-    return p.out;
+
+    if (p.err)
+    {
+        xmlFree(p.out);
+        return xmlStrdup(xslpat_str);
+    }
+    else
+    {
+        return p.out;
+    }
+
 }
 
 #endif /* HAVE_LIBXML2 */
diff --git a/dlls/msxml3/xslpattern.y b/dlls/msxml3/xslpattern.y
index 2fe4d6a..2c8e361 100644
--- a/dlls/msxml3/xslpattern.y
+++ b/dlls/msxml3/xslpattern.y
@@ -623,7 +623,7 @@ static const xmlChar NameTest_mod_post[] = "']";
 
 %%
 
-inline void xslpattern_error(parser_param const* param, void const* scanner, char const* msg)
+inline void xslpattern_error(parser_param* param, void const* scanner, char const* msg)
 {
     FIXME("%s:\n"
           "  param {\n"
@@ -632,9 +632,11 @@ inline void xslpattern_error(parser_param const* param, void const* scanner, cha
           "    pos=%i\n"
           "    len=%i\n"
           "    out=\"%s\"\n"
+          "    err=%i\n"
           "  }\n"
           "  scanner=%p\n",
-          msg, param->yyscanner, param->in, param->pos, param->len, param->out, scanner);
+          msg, param->yyscanner, param->in, param->pos, param->len,
+          param->out, ++param->err, scanner);
 }
 
 
-- 
1.7.2.3


--------------040500020902020001090201--



More information about the wine-patches mailing list