+static bool
+parse_index(xmlChar **pp, uint32_t *index_ret)
+{
+ xmlChar *p = *pp;
+ uint32_t index = 0;
+
+ *p++ = '\0'; /* overwrite '[' */
+ while (*p >= '0' && *p <= '9') {
+ uint32_t n = (index * 10) + (*p++ - '0');
+ if (n < index)
+ return false;
+ index = n;
+ }
+ if (index == 0)
+ return false;
+ if (*p != ']')
+ return false;
+ p++;
+ if (*p != '/' && *p != '\0')
+ return false;
+
+ *pp = p;
+ *index_ret = index;
+ return true;
+}
+