glib-aux: treat '=' as special character in nm_unbase64char()

This will be useful.
This commit is contained in:
Thomas Haller 2022-04-11 14:54:00 +02:00
parent e3240781b1
commit 3571292d97
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
3 changed files with 11 additions and 2 deletions

View file

@ -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);

View file

@ -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;
}

View file

@ -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;
}