Browse Source

Merge branch 'ab/attribute-format'

Many "printf"-like helper functions we have have been annotated
with __attribute__() to catch placeholder/parameter mismatches.

* ab/attribute-format:
  advice.h: add missing __attribute__((format)) & fix usage
  *.h: add a few missing __attribute__((format))
  *.c static functions: add missing __attribute__((format))
  sequencer.c: move static function to avoid forward decl
  *.c static functions: don't forward-declare __attribute__
maint
Junio C Hamano 4 years ago
parent
commit
dd6d3c90ee
  1. 1
      add-patch.c
  2. 1
      advice.h
  3. 1
      builtin/am.c
  4. 2
      builtin/bisect--helper.c
  5. 4
      builtin/index-pack.c
  6. 5
      builtin/receive-pack.c
  7. 1
      cache.h
  8. 1
      commit-graph.c
  9. 1
      contrib/credential/osxkeychain/git-credential-osxkeychain.c
  10. 1
      contrib/credential/wincred/git-credential-wincred.c
  11. 1
      gettext.c
  12. 3
      imap-send.c
  13. 1
      mailmap.c
  14. 1
      merge-ort.c
  15. 1
      merge-recursive.c
  16. 1
      midx.c
  17. 1
      quote.h
  18. 1
      ref-filter.c
  19. 43
      sequencer.c
  20. 1
      server-info.c
  21. 1
      strbuf.h
  22. 2
      t/helper/test-advise.c
  23. 1
      worktree.c

1
add-patch.c

@ -280,6 +280,7 @@ static void add_p_state_clear(struct add_p_state *s) @@ -280,6 +280,7 @@ static void add_p_state_clear(struct add_p_state *s)
clear_add_i_state(&s->s);
}

__attribute__((format (printf, 2, 3)))
static void err(struct add_p_state *s, const char *fmt, ...)
{
va_list args;

1
advice.h

@ -90,6 +90,7 @@ int advice_enabled(enum advice_type type); @@ -90,6 +90,7 @@ int advice_enabled(enum advice_type type);
/**
* Checks the visibility of the advice before printing.
*/
__attribute__((format (printf, 2, 3)))
void advise_if_enabled(enum advice_type type, const char *advice, ...);

int error_resolve_conflict(const char *me);

1
builtin/am.c

@ -210,6 +210,7 @@ static void write_state_bool(const struct am_state *state, @@ -210,6 +210,7 @@ static void write_state_bool(const struct am_state *state,
* If state->quiet is false, calls fprintf(fp, fmt, ...), and appends a newline
* at the end.
*/
__attribute__((format (printf, 3, 4)))
static void say(const struct am_state *state, FILE *fp, const char *fmt, ...)
{
va_list ap;

2
builtin/bisect--helper.c

@ -117,6 +117,7 @@ static int write_in_file(const char *path, const char *mode, const char *format, @@ -117,6 +117,7 @@ static int write_in_file(const char *path, const char *mode, const char *format,
return fclose(fp);
}

__attribute__((format (printf, 2, 3)))
static int write_to_file(const char *path, const char *format, ...)
{
int res;
@ -129,6 +130,7 @@ static int write_to_file(const char *path, const char *format, ...) @@ -129,6 +130,7 @@ static int write_to_file(const char *path, const char *format, ...)
return res;
}

__attribute__((format (printf, 2, 3)))
static int append_to_file(const char *path, const char *format, ...)
{
int res;

4
builtin/index-pack.c

@ -369,9 +369,7 @@ static void parse_pack_header(void) @@ -369,9 +369,7 @@ static void parse_pack_header(void)
use(sizeof(struct pack_header));
}

static NORETURN void bad_object(off_t offset, const char *format,
...) __attribute__((format (printf, 2, 3)));

__attribute__((format (printf, 2, 3)))
static NORETURN void bad_object(off_t offset, const char *format, ...)
{
va_list params;

5
builtin/receive-pack.c

@ -425,9 +425,6 @@ static int proc_receive_ref_matches(struct command *cmd) @@ -425,9 +425,6 @@ static int proc_receive_ref_matches(struct command *cmd)
return 0;
}

static void rp_error(const char *err, ...) __attribute__((format (printf, 1, 2)));
static void rp_warning(const char *err, ...) __attribute__((format (printf, 1, 2)));

static void report_message(const char *prefix, const char *err, va_list params)
{
int sz;
@ -445,6 +442,7 @@ static void report_message(const char *prefix, const char *err, va_list params) @@ -445,6 +442,7 @@ static void report_message(const char *prefix, const char *err, va_list params)
xwrite(2, msg, sz);
}

__attribute__((format (printf, 1, 2)))
static void rp_warning(const char *err, ...)
{
va_list params;
@ -453,6 +451,7 @@ static void rp_warning(const char *err, ...) @@ -453,6 +451,7 @@ static void rp_warning(const char *err, ...)
va_end(params);
}

__attribute__((format (printf, 1, 2)))
static void rp_error(const char *err, ...)
{
va_list params;

1
cache.h

@ -1385,6 +1385,7 @@ enum get_oid_result { @@ -1385,6 +1385,7 @@ enum get_oid_result {
};

int repo_get_oid(struct repository *r, const char *str, struct object_id *oid);
__attribute__((format (printf, 2, 3)))
int get_oidf(struct object_id *oid, const char *fmt, ...);
int repo_get_oid_commit(struct repository *r, const char *str, struct object_id *oid);
int repo_get_oid_committish(struct repository *r, const char *str, struct object_id *oid);

1
commit-graph.c

@ -2408,6 +2408,7 @@ cleanup: @@ -2408,6 +2408,7 @@ cleanup:
#define VERIFY_COMMIT_GRAPH_ERROR_HASH 2
static int verify_commit_graph_error;

__attribute__((format (printf, 1, 2)))
static void graph_report(const char *fmt, ...)
{
va_list ap;

1
contrib/credential/osxkeychain/git-credential-osxkeychain.c

@ -10,6 +10,7 @@ static char *username; @@ -10,6 +10,7 @@ static char *username;
static char *password;
static UInt16 port;

__attribute__((format (printf, 1, 2)))
static void die(const char *err, ...)
{
char msg[4096];

1
contrib/credential/wincred/git-credential-wincred.c

@ -11,6 +11,7 @@ @@ -11,6 +11,7 @@

#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))

__attribute__((format (printf, 1, 2)))
static void die(const char *err, ...)
{
char msg[4096];

1
gettext.c

@ -66,6 +66,7 @@ const char *get_preferred_languages(void) @@ -66,6 +66,7 @@ const char *get_preferred_languages(void)
}

#ifndef NO_GETTEXT
__attribute__((format (printf, 1, 2)))
static int test_vsnprintf(const char *fmt, ...)
{
char buf[26];

3
imap-send.c

@ -451,6 +451,7 @@ static int buffer_gets(struct imap_buffer *b, char **s) @@ -451,6 +451,7 @@ static int buffer_gets(struct imap_buffer *b, char **s)
/* not reached */
}

__attribute__((format (printf, 1, 2)))
static void imap_info(const char *msg, ...)
{
va_list va;
@ -463,6 +464,7 @@ static void imap_info(const char *msg, ...) @@ -463,6 +464,7 @@ static void imap_info(const char *msg, ...)
}
}

__attribute__((format (printf, 1, 2)))
static void imap_warn(const char *msg, ...)
{
va_list va;
@ -504,6 +506,7 @@ static char *next_arg(char **s) @@ -504,6 +506,7 @@ static char *next_arg(char **s)
return ret;
}

__attribute__((format (printf, 3, 4)))
static int nfsnprintf(char *buf, int blen, const char *fmt, ...)
{
int ret;

1
mailmap.c

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
#define debug_mm(...) fprintf(stderr, __VA_ARGS__)
#define debug_str(X) ((X) ? (X) : "(none)")
#else
__attribute__((format (printf, 1, 2)))
static inline void debug_mm(const char *format, ...) {}
static inline const char *debug_str(const char *s) { return s; }
#endif

1
merge-ort.c

@ -530,6 +530,7 @@ static void clear_or_reinit_internal_opts(struct merge_options_internal *opti, @@ -530,6 +530,7 @@ static void clear_or_reinit_internal_opts(struct merge_options_internal *opti,
renames->callback_data_nr = renames->callback_data_alloc = 0;
}

__attribute__((format (printf, 2, 3)))
static int err(struct merge_options *opt, const char *err, ...)
{
va_list params;

1
merge-recursive.c

@ -167,6 +167,7 @@ static void flush_output(struct merge_options *opt) @@ -167,6 +167,7 @@ static void flush_output(struct merge_options *opt)
}
}

__attribute__((format (printf, 2, 3)))
static int err(struct merge_options *opt, const char *err, ...)
{
va_list params;

1
midx.c

@ -1172,6 +1172,7 @@ void clear_midx_file(struct repository *r) @@ -1172,6 +1172,7 @@ void clear_midx_file(struct repository *r)

static int verify_midx_error;

__attribute__((format (printf, 1, 2)))
static void midx_report(const char *fmt, ...)
{
va_list ap;

1
quote.h

@ -31,6 +31,7 @@ struct strbuf; @@ -31,6 +31,7 @@ struct strbuf;

void sq_quote_buf(struct strbuf *, const char *src);
void sq_quote_argv(struct strbuf *, const char **argv);
__attribute__((format (printf, 2, 3)))
void sq_quotef(struct strbuf *, const char *fmt, ...);

/*

1
ref-filter.c

@ -213,6 +213,7 @@ static int used_atom_cnt, need_tagged, need_symref; @@ -213,6 +213,7 @@ static int used_atom_cnt, need_tagged, need_symref;
* Expand string, append it to strbuf *sb, then return error code ret.
* Allow to save few lines of code.
*/
__attribute__((format (printf, 3, 4)))
static int strbuf_addf_ret(struct strbuf *sb, int ret, const char *fmt, ...)
{
va_list ap;

43
sequencer.c

@ -3521,6 +3521,7 @@ static int do_exec(struct repository *r, const char *command_line) @@ -3521,6 +3521,7 @@ static int do_exec(struct repository *r, const char *command_line)
return status;
}

__attribute__((format (printf, 2, 3)))
static int safe_append(const char *filename, const char *fmt, ...)
{
va_list ap;
@ -3598,8 +3599,27 @@ static int do_label(struct repository *r, const char *name, int len) @@ -3598,8 +3599,27 @@ static int do_label(struct repository *r, const char *name, int len)
return ret;
}

__attribute__((format (printf, 3, 4)))
static const char *reflog_message(struct replay_opts *opts,
const char *sub_action, const char *fmt, ...);
const char *sub_action, const char *fmt, ...)
{
va_list ap;
static struct strbuf buf = STRBUF_INIT;
char *reflog_action = getenv(GIT_REFLOG_ACTION);

va_start(ap, fmt);
strbuf_reset(&buf);
strbuf_addstr(&buf, reflog_action ? reflog_action : action_name(opts));
if (sub_action)
strbuf_addf(&buf, " (%s)", sub_action);
if (fmt) {
strbuf_addstr(&buf, ": ");
strbuf_vaddf(&buf, fmt, ap);
}
va_end(ap);

return buf.buf;
}

static int do_reset(struct repository *r,
const char *name, int len,
@ -4178,27 +4198,6 @@ int apply_autostash_oid(const char *stash_oid) @@ -4178,27 +4198,6 @@ int apply_autostash_oid(const char *stash_oid)
return apply_save_autostash_oid(stash_oid, 1);
}

static const char *reflog_message(struct replay_opts *opts,
const char *sub_action, const char *fmt, ...)
{
va_list ap;
static struct strbuf buf = STRBUF_INIT;
char *reflog_action = getenv(GIT_REFLOG_ACTION);

va_start(ap, fmt);
strbuf_reset(&buf);
strbuf_addstr(&buf, reflog_action ? reflog_action : action_name(opts));
if (sub_action)
strbuf_addf(&buf, " (%s)", sub_action);
if (fmt) {
strbuf_addstr(&buf, ": ");
strbuf_vaddf(&buf, fmt, ap);
}
va_end(ap);

return buf.buf;
}

static int run_git_checkout(struct repository *r, struct replay_opts *opts,
const char *commit, const char *action)
{

1
server-info.c

@ -27,6 +27,7 @@ static int uic_is_stale(const struct update_info_ctx *uic) @@ -27,6 +27,7 @@ static int uic_is_stale(const struct update_info_ctx *uic)
return uic->old_fp == NULL;
}

__attribute__((format (printf, 2, 3)))
static int uic_printf(struct update_info_ctx *uic, const char *fmt, ...)
{
va_list ap;

1
strbuf.h

@ -263,6 +263,7 @@ static inline void strbuf_insertstr(struct strbuf *sb, size_t pos, @@ -263,6 +263,7 @@ static inline void strbuf_insertstr(struct strbuf *sb, size_t pos,
void strbuf_vinsertf(struct strbuf *sb, size_t pos, const char *fmt,
va_list ap);

__attribute__((format (printf, 3, 4)))
void strbuf_insertf(struct strbuf *sb, size_t pos, const char *fmt, ...);

/**

2
t/helper/test-advise.c

@ -16,7 +16,7 @@ int cmd__advise_if_enabled(int argc, const char **argv) @@ -16,7 +16,7 @@ int cmd__advise_if_enabled(int argc, const char **argv)
* selected here and in t0018 where this command is being
* executed.
*/
advise_if_enabled(ADVICE_NESTED_TAG, argv[1]);
advise_if_enabled(ADVICE_NESTED_TAG, "%s", argv[1]);

return 0;
}

1
worktree.c

@ -265,6 +265,7 @@ const char *worktree_prune_reason(struct worktree *wt, timestamp_t expire) @@ -265,6 +265,7 @@ const char *worktree_prune_reason(struct worktree *wt, timestamp_t expire)
}

/* convenient wrapper to deal with NULL strbuf */
__attribute__((format (printf, 2, 3)))
static void strbuf_addf_gently(struct strbuf *buf, const char *fmt, ...)
{
va_list params;

Loading…
Cancel
Save