| Index: third_party/libxml/src/xmlsave.c
 | 
| diff --git a/third_party/libxml/src/xmlsave.c b/third_party/libxml/src/xmlsave.c
 | 
| index 774404b884ad8596cf6ee9142ed5a93a1cbf7e7d..4a8e3f3903274558390c2e9981917020b77d6d81 100644
 | 
| --- a/third_party/libxml/src/xmlsave.c
 | 
| +++ b/third_party/libxml/src/xmlsave.c
 | 
| @@ -2097,8 +2097,8 @@ xmlBufAttrSerializeTxtContent(xmlBufPtr buf, xmlDocPtr doc,
 | 
|              xmlBufAdd(buf, BAD_CAST "&", 5);
 | 
|              cur++;
 | 
|              base = cur;
 | 
| -        } else if ((*cur >= 0x80) && ((doc == NULL) ||
 | 
| -                                      (doc->encoding == NULL))) {
 | 
| +        } else if ((*cur >= 0x80) && (cur[1] != 0) &&
 | 
| +	           ((doc == NULL) || (doc->encoding == NULL))) {
 | 
|              /*
 | 
|               * We assume we have UTF-8 content.
 | 
|               */
 | 
| @@ -2121,14 +2121,14 @@ xmlBufAttrSerializeTxtContent(xmlBufPtr buf, xmlDocPtr doc,
 | 
|                  val <<= 6;
 | 
|                  val |= (cur[1]) & 0x3F;
 | 
|                  l = 2;
 | 
| -            } else if (*cur < 0xF0) {
 | 
| +            } else if ((*cur < 0xF0) && (cur [2] != 0)) {
 | 
|                  val = (cur[0]) & 0x0F;
 | 
|                  val <<= 6;
 | 
|                  val |= (cur[1]) & 0x3F;
 | 
|                  val <<= 6;
 | 
|                  val |= (cur[2]) & 0x3F;
 | 
|                  l = 3;
 | 
| -            } else if (*cur < 0xF8) {
 | 
| +            } else if ((*cur < 0xF8) && (cur [2] != 0) && (cur[3] != 0)) {
 | 
|                  val = (cur[0]) & 0x07;
 | 
|                  val <<= 6;
 | 
|                  val |= (cur[1]) & 0x3F;
 | 
| 
 |