Compare commits
6 Commits
ci/separat
...
22335ca83e
| Author | SHA1 | Date | |
|---|---|---|---|
|
22335ca83e
|
|||
|
b772bd8c86
|
|||
|
58dd89be40
|
|||
|
b2ce06923e
|
|||
|
9b292a6100
|
|||
|
a9c21ce487
|
14
.github/workflows/ci-code.yml
vendored
14
.github/workflows/ci-code.yml
vendored
@@ -29,10 +29,10 @@ jobs:
|
||||
name: Linux
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build
|
||||
run: docker build -f Dockerfile.${{ matrix.flavor }} -t profanity .
|
||||
- name: Run tests
|
||||
run: docker run profanity ./ci-build.sh
|
||||
run: |
|
||||
docker build -f Dockerfile.${{ matrix.flavor }} -t profanity .
|
||||
docker run profanity ./ci-build.sh
|
||||
|
||||
code-style:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -107,7 +107,7 @@ jobs:
|
||||
name: Code Coverage
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build
|
||||
run: docker build -f Dockerfile.arch -t profanity-cov .
|
||||
- name: Run coverage
|
||||
run: docker run profanity-cov ./ci-build.sh --coverage-only
|
||||
- name: Build and run coverage
|
||||
run: |
|
||||
docker build -f Dockerfile.arch -t profanity-cov .
|
||||
docker run profanity-cov ./ci-build.sh --coverage-only
|
||||
@@ -144,16 +144,6 @@ scan-build make
|
||||
scan-view ...
|
||||
```
|
||||
|
||||
### Security checks
|
||||
|
||||
We have a static analyzer `check-cwe134.sh` that detects CWE-134 format string vulnerabilities. It runs automatically in CI but you can also run it locally:
|
||||
|
||||
```bash
|
||||
./check-cwe134.sh
|
||||
```
|
||||
|
||||
This checks for unsafe patterns where data could be passed directly as a format string to functions like `printf`, `cons_show`, etc. Never pass a raw string for formatting; use `"%s"` format specifier instead.
|
||||
|
||||
### Finding typos
|
||||
|
||||
We include a `.codespellrc` configuration file for `codespell` in the root directory.
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
FROM archlinux:latest
|
||||
FROM archlinux
|
||||
|
||||
ENV TERM=xterm
|
||||
ENV CC="ccache gcc"
|
||||
|
||||
RUN pacman -Syyu --noconfirm
|
||||
|
||||
RUN pacman -Syu --noconfirm
|
||||
# reflector is optional - if it fails due to network issues, continue with default mirrorlist
|
||||
RUN pacman -S --needed --noconfirm reflector && \
|
||||
(reflector --latest 20 --protocol https --sort rate --save /etc/pacman.d/mirrorlist || true)
|
||||
|
||||
@@ -86,6 +86,7 @@ extract_test_count() {
|
||||
# and checks that the test framework reports the failure correctly
|
||||
verify_test_failure_detection()
|
||||
{
|
||||
echo
|
||||
echo "==> Verifying test failure detection..."
|
||||
|
||||
# Create a simple failing test
|
||||
|
||||
@@ -77,8 +77,6 @@ _db_teardown(const char* ctx)
|
||||
}
|
||||
g_chatlog_database = NULL;
|
||||
}
|
||||
// Safe to call unconditionally; no-op if not initialized.
|
||||
// See: https://www.sqlite.org/c3ref/initialize.html
|
||||
sqlite3_shutdown();
|
||||
}
|
||||
|
||||
|
||||
@@ -148,8 +148,7 @@ create_input_window(void)
|
||||
* Fail gracefully instead of aborting in production.
|
||||
*/
|
||||
if (MB_CUR_MAX > PROF_MB_CUR_MAX) {
|
||||
log_error("Locale MB_CUR_MAX (%zu) exceeds compiled limit (%d)", (size_t)MB_CUR_MAX, PROF_MB_CUR_MAX);
|
||||
cons_show_error("Unsupported locale. Before running, execute in terminal: export LC_ALL=C.UTF-8");
|
||||
cons_show_error("Your locale's MB_CUR_MAX (%zu) exceeds PROF_MB_CUR_MAX (%d); input window disabled.", (size_t)MB_CUR_MAX, PROF_MB_CUR_MAX);
|
||||
return;
|
||||
}
|
||||
#ifdef NCURSES_REENTRANT
|
||||
@@ -168,7 +167,7 @@ create_input_window(void)
|
||||
|
||||
inp_win = newpad(1, INP_WIN_MAX);
|
||||
if (!inp_win) {
|
||||
log_error("Failed to allocate input window pad");
|
||||
// Failed to allocate input pad; leave inp_win NULL and avoid further use
|
||||
return;
|
||||
}
|
||||
wbkgd(inp_win, theme_attrs(THEME_INPUT_TEXT));
|
||||
|
||||
@@ -40,8 +40,6 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "log.h"
|
||||
|
||||
#ifdef HAVE_NCURSESW_NCURSES_H
|
||||
#include <ncursesw/ncurses.h>
|
||||
#elif HAVE_NCURSES_H
|
||||
@@ -114,7 +112,6 @@ status_bar_init(void)
|
||||
int row = screen_statusbar_row();
|
||||
int cols = getmaxx(stdscr);
|
||||
if (cols <= 0) {
|
||||
log_warning("status_bar_init: invalid cols %d, defaulting to 1", cols);
|
||||
cols = 1;
|
||||
}
|
||||
statusbar_win = newwin(1, cols, row, 0);
|
||||
@@ -160,7 +157,6 @@ status_bar_resize(void)
|
||||
}
|
||||
int cols = getmaxx(stdscr);
|
||||
if (cols <= 0) {
|
||||
log_warning("status_bar_resize: invalid cols %d, defaulting to 1", cols);
|
||||
cols = 1;
|
||||
}
|
||||
werase(statusbar_win);
|
||||
|
||||
@@ -79,7 +79,15 @@ static void _win_print_wrapped(WINDOW* win, const char* const message, size_t in
|
||||
static int
|
||||
_check_subwin_width(int cols, int width)
|
||||
{
|
||||
return cols <= 1 ? 1 : CLAMP(width, 1, cols - 1);
|
||||
if (cols > 1) {
|
||||
if (width < 1)
|
||||
width = 1;
|
||||
if (width >= cols)
|
||||
width = cols - 1;
|
||||
} else {
|
||||
width = 1;
|
||||
}
|
||||
return width;
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -2532,6 +2532,9 @@ _disco_items_result_handler(xmpp_stanza_t* const stanza)
|
||||
}
|
||||
|
||||
xmpp_stanza_t* child = xmpp_stanza_get_children(query);
|
||||
if (child == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
while (child) {
|
||||
const char* stanza_name = xmpp_stanza_get_name(child);
|
||||
|
||||
@@ -23,7 +23,7 @@ responds_to_last_activity_request(void **state)
|
||||
"</iq>"
|
||||
);
|
||||
|
||||
// Verify that CProof responds with last activity info
|
||||
// Verify profanity responds with last activity info
|
||||
// The 'seconds' attribute indicates idle time
|
||||
assert_true(stbbr_received(
|
||||
"<iq id='last1' type='result' to='buddy1@localhost/mobile'>"
|
||||
|
||||
Reference in New Issue
Block a user