Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit95aaed5e566e6cda2ada55d1bd7bd5a9a17311ab (patch)
Author
 Haelwenn (lanodan) Monnier <contact@hacktivis.me>
2022-02-24 01:37:36 +0100
Committer
 Haelwenn (lanodan) Monnier <contact@hacktivis.me>
2022-02-26 13:55:34 +0100
Files89147a93dc4f65a8dec7dfa59ce24ee7c98b811a
goodwolf-95aaed5e566e6cda2ada55d1bd7bd5a9a17311ab.tar
goodwolf-95aaed5e566e6cda2ada55d1bd7bd5a9a17311ab.tar.gz
goodwolf-95aaed5e566e6cda2ada55d1bd7bd5a9a17311ab.zip
Parent495d4089eecf0a4c369b302c9e42dee531471c41 (diff)
Add static analysis via flawfinder(1)
7 files changed, 32 insertions, 3 deletions
-rw-r--r--Makefile1
-rw-r--r--README.md3
-rw-r--r--badwolf.c3
-rw-r--r--bookmarks.c1
-rwxr-xr-xconfigure16
-rw-r--r--downloads.c9
-rw-r--r--uri.c2
diff --git a/Makefile b/Makefile
index acbd6ce..e347a03 100644
--- a/Makefile
+++ b/Makefile
@@ -63,6 +63,7 @@ test: $(EXE_test)
lint:
$(MANDOC) -Tlint -Wunsupp,error,warning ./badwolf.1
$(SHELLCHECK) ./configure
+ $(FLAWFINDER) .
.PHONY: install
install: all
diff --git a/README.md b/README.md
index 8b25b95..9015159 100644
--- a/README.md
+++ b/README.md
@@ -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
```
diff --git a/badwolf.c b/badwolf.c
index fabd083..afb1f2a 100644
--- a/badwolf.c
+++ b/badwolf.c
@@ -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);
diff --git a/configure b/configure
index 00dcf30..72318e6 100755
--- a/configure
+++ b/configure
@@ -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);
diff --git a/uri.c b/uri.c
index 3cbc1d6..6d3755a 100644
--- a/uri.c
+++ b/uri.c
@@ -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);