diff options
Add static analysis via flawfinder(1)
7 files changed, 32 insertions, 3 deletions
| -rw-r--r-- | Makefile | 1 | ||||
| -rw-r--r-- | README.md | 3 | ||||
| -rw-r--r-- | badwolf.c | 3 | ||||
| -rw-r--r-- | bookmarks.c | 1 | ||||
| -rwxr-xr-x | configure | 16 | ||||
| -rw-r--r-- | downloads.c | 9 | ||||
| -rw-r--r-- | uri.c | 2 |
@@ -63,6 +63,7 @@ test: $(EXE_test) lint: $(MANDOC) -Tlint -Wunsupp,error,warning ./badwolf.1 $(SHELLCHECK) ./configure + $(FLAWFINDER) . .PHONY: install install: all @@ -61,6 +61,9 @@ You need to have gettext installed. If you want a GUI, poedit exists and Weblate - (optional) gettext implementation (such as GNU Gettext) - (optional, lint) [mandoc](https://mdocml.bsd.lv/) (the command) for linting the manpage - (optional, lint) [shellcheck](https://www.shellcheck.net/) for linting the `./configure` script +- (optional, lint) [flawfinder](https://www.dwheeler.com/flawfinder/) for examining C source code for flaws + +Note: Packagers can safely ignore the lint dependencies. ### Compiling ``` @@ -710,6 +710,7 @@ new_browser(struct Window *window, const gchar *target_url, struct Client *old_b web_context = webkit_web_view_get_context(old_browser->webView); } + /* flawfinder: ignore. Consider that g_strsplit is safe enough */ badwolf_l10n = getenv("BADWOLF_L10N"); if(badwolf_l10n != NULL) @@ -1101,6 +1102,7 @@ main(int argc, char *argv[]) gtk_window_set_icon_name(GTK_WINDOW(window->main_window), "badwolf"); gchar *provider_path_app = g_build_filename(DATADIR, "interface.css", NULL); + /* flawfinder: ignore, just a presence check */ if(access(provider_path_app, R_OK) == 0) { GtkCssProvider *css_provider_app = gtk_css_provider_new(); @@ -1114,6 +1116,7 @@ main(int argc, char *argv[]) gchar *provider_path_user = g_build_filename(g_get_user_data_dir(), "badwolf", "interface.css", NULL); + /* flawfinder: ignore, just a presence check */ if(access(provider_path_user, R_OK) == 0) { GtkCssProvider *css_provider_user = gtk_css_provider_new(); diff --git a/bookmarks.c b/bookmarks.c index 2a6df22..d701279 100644 --- a/bookmarks.c +++ b/bookmarks.c @@ -76,6 +76,7 @@ bookmarks_completion_init() xmlXPathObjectPtr xpathObj = NULL; GtkListStore *list_store = gtk_list_store_new(1, G_TYPE_STRING); + /* flawfinder: ignore, just a presence check */ if(access(filename, R_OK) != 0) { g_fprintf(stderr, _("Bookmarks: No loadable file found at %s\n"), filename); @@ -28,6 +28,7 @@ Variables: EXTRA_CFLAGS=OPTIONS MANDOC=BIN SHELLCHECK=BIN + FLAWFINDER=BIN WITH_WEBKITGTK=(4.0|4.1) WITH_URI_PARSER=(guri|libsoup2) @@ -71,6 +72,7 @@ CC="${CC:-cc}" CFLAGS="${CFLAGS:--g -O2 -pie -fPIE}" MANDOC="${MANDOC:-mandoc}" SHELLCHECK="${SHELLCHECK:-shellcheck}" +FLAWFINDER="${FLAWFINDER:-flawfinder}" # Also allow variables through arguments @@ -121,7 +123,7 @@ if command -v "${MANDOC}" >/dev/null ; is_ok then : else - printf 'Warning: Tests depending on mandoc disabled' + printf 'Warning: manpage linting via mandoc(1) disabled' MANDOC="true" fi @@ -130,10 +132,20 @@ if command -v "${SHELLCHECK}" >/dev/null ; is_ok then : else - printf 'Warning: Tests depending on shellcheck disabled' + printf 'Warning: shell linting via shellcheck(1) disabled' SHELLCHECK="true" fi +printf 'Checking %s command existance ...' "${FLAWFINDER}" +if command -v "${FLAWFINDER}" >/dev/null ; is_ok +then + : +else + printf 'Warning: C analysis via flawfinder(1) disabled' + SHELLCHECK="true" +fi + + echo # pkg-config diff --git a/downloads.c b/downloads.c index 4c54b95..ed6a533 100644 --- a/downloads.c +++ b/downloads.c @@ -19,8 +19,12 @@ download_stop_iconCb_clicked(GtkButton *stop_icon, gpointer user_data) } void -download_format_elapsed(char *formatted, size_t formatted_size, char *format, int total) +download_format_elapsed(char *restrict formatted, + size_t formatted_size, + char *restrict format, + int total) { + /* flawfinder: ignore, format string only passed by ourselves */ snprintf(formatted, formatted_size, format, @@ -107,6 +111,7 @@ void downloadCb_failed(WebKitDownload *webkit_download, GError *error, gpointer user_data) { struct Download *download = (struct Download *)user_data; + /* flawfinder: ignore. proper buffer limits are used */ char formatted[BUFSIZ]; int total = (int)webkit_download_get_elapsed_time(webkit_download); char *format; @@ -130,6 +135,7 @@ void downloadCb_finished(WebKitDownload *webkit_download, gpointer user_data) { struct Download *download = (struct Download *)user_data; + /* flawfinder: ignore. proper buffer limits are used */ char formatted[BUFSIZ]; int total = (int)webkit_download_get_elapsed_time(webkit_download); @@ -157,6 +163,7 @@ downloadCb_received_data(WebKitDownload *webkit_download, guint64 data_lenght, g { (void)data_lenght; struct Download *download = (struct Download *)user_data; + /* flawfinder: ignore. proper buffer limits are used */ char formatted[BUFSIZ]; int total = (int)webkit_download_get_elapsed_time(webkit_download); @@ -20,11 +20,13 @@ badwolf_ensure_uri_scheme(const gchar *text, gboolean try_file) if(try_file) { + /* flawfinder: ignore. `path` is allocated by realpath itself */ path = realpath(text, NULL); gchar *f = NULL; if(path != NULL) { + /* flawfinder: ignore. only used as presence check, no way to pass file descriptor */ if(access(path, R_OK) == 0) { f = g_strdup_printf("file://%s", path); |