[PATCH] D71566: New checks for fortified sprintf
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 20 08:33:20 PST 2020
aaron.ballman added inline comments.
================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:745-746
+def warn_fortify_source_format_overflow : Warning<
+ "'%0' will always overflow; destination buffer has size %1,"
+ " but format string expands to at least %2">,
+ InGroup<FortifySource>;
----------------
I'm fine with the current wording because it's consistent with the existing diagnostics, but I wish we would quantify the size with units in these diagnostics. (e.g., mention that this is measured in bytes as opposed to anything else).
================
Comment at: clang/lib/Sema/SemaChecking.cpp:405-406
+ bool HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS,
+ const char *startSpecifier,
+ unsigned specifierLen) override {
+ const analyze_format_string::OptionalAmount &FW = FS.getFieldWidth();
----------------
Naming nits: `StartSpecifier` and `SpecifierLen`. It looks like `startSpecifier` isn't used and the name can probably just be dropped.
================
Comment at: clang/lib/Sema/SemaChecking.cpp:436-437
+ switch (FS.getConversionSpecifier().getKind()) {
+ case analyze_format_string::ConversionSpecifier::pArg: // leading 0x
+ Size += 3;
+ break;
----------------
Why is size incremented by 3 here instead of 2 as above with a leading 0x?
================
Comment at: clang/lib/Sema/SemaChecking.cpp:448
+ }
+ Size -= specifierLen;
+ return true;
----------------
Guard against wraparound?
================
Comment at: clang/lib/Sema/SemaChecking.cpp:489
+ if (auto *Format = dyn_cast<StringLiteral>(FormatExpr)) {
+
+ if (!Format->isAscii() && !Format->isUTF8())
----------------
Spurious whitespace.
================
Comment at: clang/lib/Sema/SemaChecking.cpp:490
+
+ if (!Format->isAscii() && !Format->isUTF8())
+ return;
----------------
We can handle UTF-8 format strings even when they contain non-ASCII characters?
================
Comment at: clang/lib/Sema/SemaChecking.cpp:8237
H.DoneProcessing();
+
} else if (Type == Sema::FST_Scanf) {
----------------
Spurious whitespace change?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D71566/new/
https://reviews.llvm.org/D71566
More information about the cfe-commits
mailing list