OSDN Git Service

* bug fix
authorkonn <konn@1a406e8e-add9-4483-a2c8-d8cac5b7c224>
Tue, 27 Jun 2006 20:03:51 +0000 (20:03 +0000)
committerkonn <konn@1a406e8e-add9-4483-a2c8-d8cac5b7c224>
Tue, 27 Jun 2006 20:03:51 +0000 (20:03 +0000)
      - it cannot correctly read the value when the backslash exists in the attribute.

git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/trunk@1239 1a406e8e-add9-4483-a2c8-d8cac5b7c224

src/qs_ignore_sp.c
src/qs_parse_attr.c

index 4564f60..de9fba7 100644 (file)
@@ -41,8 +41,8 @@ qs_ignore_sp_and_quote(Doc* doc, const char* s, int len)
 
   for(ii=0;
       *sp && (is_white_space(*sp) || is_quote(*sp)) && ii<len;
-      ii++, sp++) 
-          ;
+      ii++, sp++)
+        ;
 
   return (sp - s);
 }
index fc9086c..8de6d3b 100644 (file)
@@ -81,9 +81,17 @@ qs_parse_attr(Doc* doc, const char*s, int len, int *pos)
 
   size = 0;
   if (!novalue) {
-    /* ignore space */
+    /* 
+     * ignore space
+     */
     ii += qs_ignore_sp(doc, &s[ii], len-ii);
+
+    backslash = 0;
     for (;ii<len; ii++) {
+      if (s[ii] == '\\') {
+        backslash = 1;
+        break;
+      }
       if (s[ii] == '\'' || s[ii] == '"') {
         use_quote = 1;
         ii++;
@@ -95,7 +103,13 @@ qs_parse_attr(Doc* doc, const char*s, int len, int *pos)
     }
   
     start_pos = ii;
-    /* get attr value */
+    if (backslash && ii + 2 < len)
+      ii+=2;
+    
+    backslash = 0;
+    /* 
+     * get attr value 
+     */
     for (;ii<len; ii++) {
       if (is_sjis_kanji(s[ii])) {
         ii++;
@@ -107,6 +121,9 @@ qs_parse_attr(Doc* doc, const char*s, int len, int *pos)
         if (! use_quote) 
           break;
       }
+      if (s[ii] == '\\') 
+        continue;
+
       if (s[ii] == '"') 
         break;
 
@@ -125,6 +142,7 @@ qs_parse_attr(Doc* doc, const char*s, int len, int *pos)
   attr = qs_new_attr(doc);
   attr->name = name;
   attr->value = value;
+
   QX_LOGGER_DEBUG(attr->name);
   QX_LOGGER_DEBUG(attr->value);