From 3571292d97418d4de4b37d6fa88b68d722e4775d Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 11 Apr 2022 14:54:00 +0200 Subject: [PATCH] glib-aux: treat '=' as special character in nm_unbase64char() This will be useful. --- src/core/tests/test-systemd.c | 2 ++ src/libnm-glib-aux/nm-shared-utils.c | 4 ++++ src/libnm-glib-aux/tests/test-shared-general.c | 7 +++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/core/tests/test-systemd.c b/src/core/tests/test-systemd.c index 9c12032087..3d0a3f2fef 100644 --- a/src/core/tests/test-systemd.c +++ b/src/core/tests/test-systemd.c @@ -144,7 +144,9 @@ _test_unbase64char(char ch, gboolean maybe_invalid) g_assert(!maybe_invalid); g_assert_cmpint(r, <, 0); g_assert_cmpint(nm_sd_utils_unbase64char(ch, TRUE), ==, G_MAXINT); + g_assert_cmpint(nm_unbase64char(ch), ==, -ERANGE); } else { + g_assert_cmpint(nm_unbase64char(ch), ==, r); g_assert_cmpint(r, ==, nm_sd_utils_unbase64char(ch, TRUE)); if (r >= 0) g_assert_cmpint(r, <=, 255); diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c index c325e6c9e2..d5acfd3594 100644 --- a/src/libnm-glib-aux/nm-shared-utils.c +++ b/src/libnm-glib-aux/nm-shared-utils.c @@ -6734,6 +6734,10 @@ nm_unbase64char(char c) return ('Z' - 'A' + 1) + ('z' - 'a' + 1) + ('9' - '0' + 1); case '/': return ('Z' - 'A' + 1) + ('z' - 'a' + 1) + ('9' - '0' + 1) + 1; + case '=': + /* The padding is a different kind of base64 character. Return + * a special error code for it. */ + return -ERANGE; default: return -EINVAL; } diff --git a/src/libnm-glib-aux/tests/test-shared-general.c b/src/libnm-glib-aux/tests/test-shared-general.c index 58ede68c78..783b771a0d 100644 --- a/src/libnm-glib-aux/tests/test-shared-general.c +++ b/src/libnm-glib-aux/tests/test-shared-general.c @@ -1593,7 +1593,7 @@ test_unbase64char(void) g_assert_cmpint(nm_unbase64char('9'), ==, 61); g_assert_cmpint(nm_unbase64char('+'), ==, 62); g_assert_cmpint(nm_unbase64char('/'), ==, 63); - g_assert_cmpint(nm_unbase64char('='), ==, -EINVAL); + g_assert_cmpint(nm_unbase64char('='), ==, -ERANGE); g_assert_cmpint(nm_unbase64char('\0'), ==, -EINVAL); g_assert_cmpint(nm_unbase64char('\1'), ==, -EINVAL); g_assert_cmpint(nm_unbase64char('\x7F'), ==, -EINVAL); @@ -1606,7 +1606,10 @@ test_unbase64char(void) base64 = nm_unbase64char((char) i); if (base64 < 0) { - g_assert_cmpint(base64, ==, -EINVAL); + if (((char) i) == '=') + g_assert_cmpint(base64, ==, -ERANGE); + else + g_assert_cmpint(base64, ==, -EINVAL); base64 = -1; }