goto err;
}
value = strbuf_str(&buf);
+ if (value == NULL) {
+ strbuf_release(&buf);
+ goto err;
+ }
add_value(&node->values, value, buf.used, priority);
strbuf_clear(&buf);
}
if (!child)
continue;
- strbuf_pushchar(buf, ch);
- index_dump_node(child, buf, fd);
- strbuf_popchar(buf);
+ if (strbuf_pushchar(buf, ch)) {
+ index_dump_node(child, buf, fd);
+ strbuf_popchar(buf);
+ }
}
strbuf_popchars(buf, pushed);
return;
strbuf_init(&buf);
- strbuf_pushchars(&buf, prefix);
- index_dump_node(root, &buf, fd);
+ if (strbuf_pushchars(&buf, prefix))
+ index_dump_node(root, &buf, fd);
strbuf_release(&buf);
}
while (node->prefix[j]) {
ch = node->prefix[j];
- strbuf_pushchar(buf, ch);
- pushed++;
+ pushed += strbuf_pushchar(buf, ch);
j++;
}
if (!child)
continue;
- strbuf_pushchar(buf, ch);
- index_searchwild__all(child, 0, buf, subkey, out);
- strbuf_popchar(buf);
+ if (strbuf_pushchar(buf, ch)) {
+ index_searchwild__all(child, 0, buf, subkey, out);
+ strbuf_popchar(buf);
+ }
}
if (node->values) {
- if (fnmatch(strbuf_str(buf), subkey, 0) == 0)
+ const char *s = strbuf_str(buf);
+
+ if (s != NULL && fnmatch(s, subkey, 0) == 0)
index_searchwild__allvalues(node, out);
else
index_close(node);
child = index_readchild(node, '*');
if (child) {
- strbuf_pushchar(buf, '*');
- index_searchwild__all(child, 0, buf, &key[i], out);
- strbuf_popchar(buf);
+ if (strbuf_pushchar(buf, '*')) {
+ index_searchwild__all(child, 0, buf, &key[i], out);
+ strbuf_popchar(buf);
+ }
}
child = index_readchild(node, '?');
if (child) {
- strbuf_pushchar(buf, '?');
- index_searchwild__all(child, 0, buf, &key[i], out);
- strbuf_popchar(buf);
+ if (strbuf_pushchar(buf, '?')) {
+ index_searchwild__all(child, 0, buf, &key[i], out);
+ strbuf_popchar(buf);
+ }
}
child = index_readchild(node, '[');
if (child) {
- strbuf_pushchar(buf, '[');
- index_searchwild__all(child, 0, buf, &key[i], out);
- strbuf_popchar(buf);
+ if (strbuf_pushchar(buf, '[')) {
+ index_searchwild__all(child, 0, buf, &key[i], out);
+ strbuf_popchar(buf);
+ }
}
if (key[i] == '\0') {
if (child == NULL)
continue;
- strbuf_pushchar(buf, ch);
- index_mm_dump_node(child, buf, fd);
- strbuf_popchar(buf);
+ if (strbuf_pushchar(buf, ch)) {
+ index_mm_dump_node(child, buf, fd);
+ strbuf_popchar(buf);
+ }
}
strbuf_popchars(buf, pushed);
return;
strbuf_init(&buf);
- strbuf_pushchars(&buf, prefix);
- index_mm_dump_node(root, &buf, fd);
+ if (strbuf_pushchars(&buf, prefix))
+ index_mm_dump_node(root, &buf, fd);
strbuf_release(&buf);
}
while (node->prefix[j]) {
ch = node->prefix[j];
- strbuf_pushchar(buf, ch);
- pushed++;
+ pushed += strbuf_pushchar(buf, ch);
j++;
}
if (!child)
continue;
- strbuf_pushchar(buf, ch);
- index_mm_searchwild_all(child, 0, buf, subkey, out);
- strbuf_popchar(buf);
+ if (strbuf_pushchar(buf, ch)) {
+ index_mm_searchwild_all(child, 0, buf, subkey, out);
+ strbuf_popchar(buf);
+ }
}
if (node->values.len > 0) {
- if (fnmatch(strbuf_str(buf), subkey, 0) == 0)
+ const char *s = strbuf_str(buf);
+
+ if (s != NULL && fnmatch(s, subkey, 0) == 0)
index_mm_searchwild_allvalues(node, out);
else
index_mm_free_node(node);
child = index_mm_readchild(node, '*');
if (child) {
- strbuf_pushchar(buf, '*');
- index_mm_searchwild_all(child, 0, buf, &key[i], out);
- strbuf_popchar(buf);
+ if (strbuf_pushchar(buf, '*')) {
+ index_mm_searchwild_all(child, 0, buf, &key[i], out);
+ strbuf_popchar(buf);
+ }
}
child = index_mm_readchild(node, '?');
if (child) {
- strbuf_pushchar(buf, '?');
- index_mm_searchwild_all(child, 0, buf, &key[i], out);
- strbuf_popchar(buf);
+ if (strbuf_pushchar(buf, '?')) {
+ index_mm_searchwild_all(child, 0, buf, &key[i], out);
+ strbuf_popchar(buf);
+ }
}
child = index_mm_readchild(node, '[');
if (child) {
- strbuf_pushchar(buf, '[');
- index_mm_searchwild_all(child, 0, buf, &key[i], out);
- strbuf_popchar(buf);
+ if (strbuf_pushchar(buf, '[')) {
+ index_mm_searchwild_all(child, 0, buf, &key[i], out);
+ strbuf_popchar(buf);
+ }
}
if (key[i] == '\0') {