Browse Source

Add gboolean check support.

pull/426/head
Vsevolod Stakhov 10 years ago
parent
commit
8ca7e0347a
  1. 17
      clang-plugin/printf_check.cc

17
clang-plugin/printf_check.cc

@ -75,6 +75,9 @@ namespace rspamd {
static bool int32_arg_handler (const Expr *arg,
struct PrintfArgChecker *ctx);
static bool gboolean_arg_handler (const Expr *arg,
struct PrintfArgChecker *ctx);
static bool tok_arg_handler (const Expr *arg,
struct PrintfArgChecker *ctx);
@ -187,6 +190,9 @@ namespace rspamd {
case 'D':
return llvm::make_unique<PrintfArgChecker> (int32_arg_handler,
this->pcontext, this->ci);
case 'b':
return llvm::make_unique<PrintfArgChecker> (gboolean_arg_handler,
this->pcontext, this->ci);
case 'T':
return llvm::make_unique<PrintfArgChecker> (tok_arg_handler,
this->pcontext, this->ci);
@ -350,7 +356,7 @@ namespace rspamd {
format_specs = {
's', 'd', 'l', 'L', 'v', 'V', 'f', 'F', 'g', 'G',
'T', 'z', 'D', 'c', 'p', 'P', 'e'
'T', 'z', 'D', 'c', 'p', 'P', 'e', 'b'
};
};
@ -674,6 +680,15 @@ namespace rspamd {
return true;
}
static bool
gboolean_arg_handler (const Expr *arg, struct PrintfArgChecker *ctx)
{
return check_builtin_type (arg,
ctx,
{BuiltinType::Kind::Int}, // gboolean is int in fact
"%b");
}
static bool
check_struct_type (const Expr *arg, struct PrintfArgChecker *ctx,
const std::string &sname, const std::string &fmt)

Loading…
Cancel
Save