Christian Couder <christian.couder@xxxxxxxxx> writes: > diff --git a/strbuf.c b/strbuf.c > index 3d2189a7f6..cccfdec0e3 100644 > --- a/strbuf.c > +++ b/strbuf.c > @@ -1082,3 +1082,12 @@ void strbuf_strip_file_from_path(struct strbuf *sb) > char *path_sep = find_last_dir_sep(sb->buf); > strbuf_setlen(sb, path_sep ? path_sep - sb->buf + 1 : 0); > } > + > +void strbuf_sanitize(struct strbuf *sb) > +{ > + strbuf_trim(sb); > + for (size_t i = 0; i < sb->len; i++) { > + if (sb->buf[i] <= 32 || sb->buf[i] >= 127) > + sb->buf[i] = '.'; > + } > +} This looked a bit _too_ specific for the use of the transport layer (which raises the question if it should even live in strbuf.[ch]). It also made me wonder if different callers likely want to have different variants (e.g., do not trim, only trim at the tail, squash a run of unprintables into a single '.', use '?' instead of '.', etc., etc.). It turns out that there is only *one* existing caller that gets replaced with this "common" version, which made it a Meh to me. Let's hope that there will be many new callers to make this step worthwhile. > __attribute__((format (printf,1,2))) > int printf_ln(const char *fmt, ...); > __attribute__((format (printf,2,3))) > diff --git a/version.c b/version.c > index 41b718c29e..951e6dca74 100644 > --- a/version.c > +++ b/version.c > @@ -24,15 +24,10 @@ const char *git_user_agent_sanitized(void) > > if (!agent) { > struct strbuf buf = STRBUF_INIT; > - int i; > > strbuf_addstr(&buf, git_user_agent()); > - strbuf_trim(&buf); > - for (i = 0; i < buf.len; i++) { > - if (buf.buf[i] <= 32 || buf.buf[i] >= 127) > - buf.buf[i] = '.'; > - } > - agent = buf.buf; > + strbuf_sanitize(&buf); > + agent = strbuf_detach(&buf, NULL); > } > > return agent;