зеркало из https://github.com/microsoft/git.git
strbuf_setlen(): do not barf on setting length of an empty buffer to 0
strbuf_setlen() expect to be able to NUL terminate the buffer, but a completely empty strbuf could have an empty buffer with 0 allocation; both the assert() and the assignment for NUL termination would fail. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
7a33bcbe80
Коммит
a8f3e2219c
9
strbuf.h
9
strbuf.h
|
@ -65,14 +65,17 @@ static inline void strbuf_swap(struct strbuf *a, struct strbuf *b) {
|
||||||
static inline size_t strbuf_avail(struct strbuf *sb) {
|
static inline size_t strbuf_avail(struct strbuf *sb) {
|
||||||
return sb->alloc ? sb->alloc - sb->len - 1 : 0;
|
return sb->alloc ? sb->alloc - sb->len - 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void strbuf_grow(struct strbuf *, size_t);
|
||||||
|
|
||||||
static inline void strbuf_setlen(struct strbuf *sb, size_t len) {
|
static inline void strbuf_setlen(struct strbuf *sb, size_t len) {
|
||||||
assert (len < sb->alloc);
|
if (!sb->alloc)
|
||||||
|
strbuf_grow(sb, 0);
|
||||||
|
assert(len < sb->alloc);
|
||||||
sb->len = len;
|
sb->len = len;
|
||||||
sb->buf[len] = '\0';
|
sb->buf[len] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void strbuf_grow(struct strbuf *, size_t);
|
|
||||||
|
|
||||||
/*----- content related -----*/
|
/*----- content related -----*/
|
||||||
extern void strbuf_rtrim(struct strbuf *);
|
extern void strbuf_rtrim(struct strbuf *);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче