* Report GLib errors @ 2023-09-15 12:50 David Bremner 2023-09-15 12:50 ` [PATCH 1/4] test: add known broken test for bad utf8 in config David Bremner ` (4 more replies) 0 siblings, 5 replies; 6+ messages in thread From: David Bremner @ 2023-09-15 12:50 UTC (permalink / raw) To: notmuch This series obsoletes the WIP series [0]. I think it's probably worth doing a point release with this fix as it is not too intrusive, and upcoming GLib releases will likely cause more users to experience the problems Eric found [1]. [0]: id:20230913005636.135665-1-david@tethera.net [1]: id:5a7paaqa2dvdo5lmnxvaeacfwhdytfnkr4gfh6mtlotdviki2s@ro4gz4m2aqsw ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/4] test: add known broken test for bad utf8 in config 2023-09-15 12:50 Report GLib errors David Bremner @ 2023-09-15 12:50 ` David Bremner 2023-09-15 12:50 ` [PATCH 2/4] CLI: exit with error when load_config returns an error David Bremner ` (3 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: David Bremner @ 2023-09-15 12:50 UTC (permalink / raw) To: notmuch We should ideally print an informative error message, but at the very least we should not exit with success. --- test/T030-config.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/T030-config.sh b/test/T030-config.sh index ea0b4012..6ef759a4 100755 --- a/test/T030-config.sh +++ b/test/T030-config.sh @@ -3,6 +3,8 @@ test_description='"notmuch config"' . $(dirname "$0")/test-lib.sh || exit 1 +cp notmuch-config initial-config + test_begin_subtest "Get string value" test_expect_equal "$(notmuch config get user.name)" "Notmuch Test Suite" @@ -193,4 +195,11 @@ test_begin_subtest "get built_with.nonexistent prints false" output=$(notmuch config get built_with.nonexistent) test_expect_equal "$output" "false" +test_begin_subtest "Bad utf8 reported as error" +test_subtest_known_broken +cp initial-config bad-config +printf '[query]\nq3=from:\xff\n' >>bad-config +test_expect_code 1 "notmuch --config=./bad-config config list" + test_done + -- 2.40.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/4] CLI: exit with error when load_config returns an error. 2023-09-15 12:50 Report GLib errors David Bremner 2023-09-15 12:50 ` [PATCH 1/4] test: add known broken test for bad utf8 in config David Bremner @ 2023-09-15 12:50 ` David Bremner 2023-09-15 12:50 ` [PATCH 3/4] test: add known broken subtest for the bad config error message David Bremner ` (2 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: David Bremner @ 2023-09-15 12:50 UTC (permalink / raw) To: notmuch For now print a generic error message and exit with error on any non-success code. Previously we were exiting, but with exit code zero, leading users / scripts to thing the command had succeeded. --- notmuch.c | 2 ++ test/T030-config.sh | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/notmuch.c b/notmuch.c index 37286b8f..69a18131 100644 --- a/notmuch.c +++ b/notmuch.c @@ -584,6 +584,8 @@ main (int argc, char *argv[]) case NOTMUCH_STATUS_SUCCESS: break; default: + fputs ("Error: unable to load config file.\n", stderr); + ret = 1; goto DONE; } diff --git a/test/T030-config.sh b/test/T030-config.sh index 6ef759a4..8b3ef436 100755 --- a/test/T030-config.sh +++ b/test/T030-config.sh @@ -196,7 +196,6 @@ output=$(notmuch config get built_with.nonexistent) test_expect_equal "$output" "false" test_begin_subtest "Bad utf8 reported as error" -test_subtest_known_broken cp initial-config bad-config printf '[query]\nq3=from:\xff\n' >>bad-config test_expect_code 1 "notmuch --config=./bad-config config list" -- 2.40.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/4] test: add known broken subtest for the bad config error message 2023-09-15 12:50 Report GLib errors David Bremner 2023-09-15 12:50 ` [PATCH 1/4] test: add known broken test for bad utf8 in config David Bremner 2023-09-15 12:50 ` [PATCH 2/4] CLI: exit with error when load_config returns an error David Bremner @ 2023-09-15 12:50 ` David Bremner 2023-09-15 12:50 ` [PATCH 4/4] Pass error message from GLib ini parser to CLI David Bremner 2023-09-23 11:47 ` Report GLib errors David Bremner 4 siblings, 0 replies; 6+ messages in thread From: David Bremner @ 2023-09-15 12:50 UTC (permalink / raw) To: notmuch This is a bit fragile w.r.t. glib changing their error message, but it already helped me find one formatting bug, so for now I think it's worth it, instead of just grepping for "UTF-8". --- test/T030-config.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/T030-config.sh b/test/T030-config.sh index 8b3ef436..11428e8a 100755 --- a/test/T030-config.sh +++ b/test/T030-config.sh @@ -200,5 +200,14 @@ cp initial-config bad-config printf '[query]\nq3=from:\xff\n' >>bad-config test_expect_code 1 "notmuch --config=./bad-config config list" +test_begin_subtest "Specific error message about bad utf8" +test_subtest_known_broken +notmuch --config=./bad-config config list 2>ERRORS +cat <<EOF > EXPECTED +GLib: Key file contains key “q3” with value “from:�” which is not UTF-8 +Error: unable to load config file. +EOF +test_expect_equal_file EXPECTED ERRORS + test_done -- 2.40.1 \r ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 4/4] Pass error message from GLib ini parser to CLI 2023-09-15 12:50 Report GLib errors David Bremner ` (2 preceding siblings ...) 2023-09-15 12:50 ` [PATCH 3/4] test: add known broken subtest for the bad config error message David Bremner @ 2023-09-15 12:50 ` David Bremner 2023-09-23 11:47 ` Report GLib errors David Bremner 4 siblings, 0 replies; 6+ messages in thread From: David Bremner @ 2023-09-15 12:50 UTC (permalink / raw) To: notmuch The function _notmuch_config_load_from_file is only called in two places in open.cc. Update internal API to match the idiom in open.cc. Adding a newline is needed for consistency with other status strings. Based in part on a patch [1] from Eric Blake. [1]: id:20230906153402.101471-1-eblake@redhat.com --- lib/config.cc | 13 +++++++++++-- lib/notmuch-private.h | 2 +- lib/open.cc | 4 ++-- notmuch.c | 6 ++++++ test/T030-config.sh | 1 - 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/config.cc b/lib/config.cc index 2323860d..6cd15fab 100644 --- a/lib/config.cc +++ b/lib/config.cc @@ -416,7 +416,8 @@ _expand_path (void *ctx, const char *key, const char *val) notmuch_status_t _notmuch_config_load_from_file (notmuch_database_t *notmuch, - GKeyFile *file) + GKeyFile *file, + char **status_string) { notmuch_status_t status = NOTMUCH_STATUS_SUCCESS; gchar **groups = NULL, **keys, *val; @@ -435,6 +436,7 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch, for (gchar **keys_p = keys; *keys_p; keys_p++) { char *absolute_key = talloc_asprintf (notmuch, "%s.%s", *grp, *keys_p); char *normalized_val; + GError *gerr = NULL; /* If we opened from a given path, do not overwrite it */ if (strcmp (absolute_key, "database.path") == 0 && @@ -442,7 +444,14 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch, notmuch->xapian_db) continue; - val = g_key_file_get_string (file, *grp, *keys_p, NULL); + val = g_key_file_get_string (file, *grp, *keys_p, &gerr); + if (gerr) { + if (status_string) + IGNORE_RESULT (asprintf (status_string, + "GLib: %s\n", + gerr->message)); + g_error_free (gerr); + } if (! val) { status = NOTMUCH_STATUS_FILE_ERROR; goto DONE; diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h index c19ee8e2..367e23e6 100644 --- a/lib/notmuch-private.h +++ b/lib/notmuch-private.h @@ -726,7 +726,7 @@ notmuch_status_t _notmuch_config_load_from_database (notmuch_database_t *db); notmuch_status_t -_notmuch_config_load_from_file (notmuch_database_t *db, GKeyFile *file); +_notmuch_config_load_from_file (notmuch_database_t *db, GKeyFile *file, char **status_string); notmuch_status_t _notmuch_config_load_defaults (notmuch_database_t *db); diff --git a/lib/open.cc b/lib/open.cc index 54d1faf3..005872dc 100644 --- a/lib/open.cc +++ b/lib/open.cc @@ -555,7 +555,7 @@ _finish_open (notmuch_database_t *notmuch, goto DONE; if (key_file) - status = _notmuch_config_load_from_file (notmuch, key_file); + status = _notmuch_config_load_from_file (notmuch, key_file, &message); if (status) goto DONE; @@ -961,7 +961,7 @@ notmuch_database_load_config (const char *database_path, } if (key_file) { - status = _notmuch_config_load_from_file (notmuch, key_file); + status = _notmuch_config_load_from_file (notmuch, key_file, &message); if (status) goto DONE; } diff --git a/notmuch.c b/notmuch.c index 69a18131..814b9e42 100644 --- a/notmuch.c +++ b/notmuch.c @@ -563,6 +563,12 @@ main (int argc, char *argv[]) NULL, ¬much, &status_string); + if (status_string) { + fputs (status_string, stderr); + free (status_string); + status_string = NULL; + } + switch (status) { case NOTMUCH_STATUS_NO_CONFIG: if (! (command->mode & NOTMUCH_COMMAND_CONFIG_CREATE)) { diff --git a/test/T030-config.sh b/test/T030-config.sh index 11428e8a..8aee9dc9 100755 --- a/test/T030-config.sh +++ b/test/T030-config.sh @@ -201,7 +201,6 @@ printf '[query]\nq3=from:\xff\n' >>bad-config test_expect_code 1 "notmuch --config=./bad-config config list" test_begin_subtest "Specific error message about bad utf8" -test_subtest_known_broken notmuch --config=./bad-config config list 2>ERRORS cat <<EOF > EXPECTED GLib: Key file contains key “q3” with value “from:�” which is not UTF-8 -- 2.40.1 \r ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: Report GLib errors 2023-09-15 12:50 Report GLib errors David Bremner ` (3 preceding siblings ...) 2023-09-15 12:50 ` [PATCH 4/4] Pass error message from GLib ini parser to CLI David Bremner @ 2023-09-23 11:47 ` David Bremner 4 siblings, 0 replies; 6+ messages in thread From: David Bremner @ 2023-09-23 11:47 UTC (permalink / raw) To: notmuch David Bremner <david@tethera.net> writes: > This series obsoletes the WIP series [0]. I think it's probably worth > doing a point release with this fix as it is not too intrusive, and > upcoming GLib releases will likely cause more users to experience the > problems Eric found [1]. > > [0]: id:20230913005636.135665-1-david@tethera.net > [1]: id:5a7paaqa2dvdo5lmnxvaeacfwhdytfnkr4gfh6mtlotdviki2s@ro4gz4m2aqsw Series applied (with a couple of whitespace and commit message fixups) to release and master. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-09-23 11:47 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-09-15 12:50 Report GLib errors David Bremner 2023-09-15 12:50 ` [PATCH 1/4] test: add known broken test for bad utf8 in config David Bremner 2023-09-15 12:50 ` [PATCH 2/4] CLI: exit with error when load_config returns an error David Bremner 2023-09-15 12:50 ` [PATCH 3/4] test: add known broken subtest for the bad config error message David Bremner 2023-09-15 12:50 ` [PATCH 4/4] Pass error message from GLib ini parser to CLI David Bremner 2023-09-23 11:47 ` Report GLib errors David Bremner
Code repositories for project(s) associated with this public inbox https://yhetil.org/notmuch.git/ This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).