20-04-2008
+ * fix a case where a single-element root path (e.g. "/printer") would not
+ pass xmlNodeGetPath
* fix a problem where attributes or elements starting with the same letter
sequence could give a false negative result
* Add a 'clear' attribute to the xmlErrorGet functions that indicates whether
#ifndef NDEBUG
# include <stdio.h>
#endif
-#include <fcntl.h>
-#include <stdlib.h> /* free, malloc */
+#include <stdlib.h> /* free, malloc */
#include <string.h>
+#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <assert.h>
assert(buf != 0);
assert(buflen > 0);
- slen = buflen-1;
- if (slen > xid->name_len)
- {
- slen = xid->name_len;
- }
- else
+ slen = xid->name_len;
+ if (slen >= buflen)
{
+ slen = buflen-1;
xmlErrorSet(xid, 0, XML_TRUNCATE_RESULT);
}
memcpy(buf, xid->name, slen);
assert(start != 0);
assert(len != 0);
+ assert(*len != 0);
assert(name != 0);
assert(*name != 0);
assert(plen != 0);
assert(*plen != 0);
- if ((*len == 0) || (*plen == 0) || (*plen > *len))
- return 0;
+ if (*plen > *len) return 0;
node = *name;
if (*node == '/') node++;
if (!path) plen = slen;
else plen = path++ - node;
- if (path)
+ num = 0;
+ ret = __xmlNodeGet(start, len, &node, &plen, &num);
+ if (ret && path)
{
- num = 0;
- ret = __xmlNodeGet(start, len, &node, &plen, &num);
- if (ret)
- {
- plen = slen - (path - *name);
- ret = __xmlNodeGetPath(ret, len, &path, &plen);
- *name = path;
- }
- else if (plen == 0)
- {
- *name = node;
- }
+ plen = slen - (path - *name);
+ ret = __xmlNodeGetPath(ret, len, &path, &plen);
+ *name = path;
+ }
+ else if (plen == 0)
+ {
+ *name = node;
}
}
if (*rlen > *len)
{
*rlen = 0;
- *name = start;
+ *name = (char *)start;
*len = XML_UNEXPECTED_EOF;
return 0;
}