libnm: don't reject empty strings in add/remove API

For example for NM_SETTING_CONNECTION_SECONDARIES, the user can set
the GObject property to a string list that includes empty strings.

The C accessors (add/remove-by-value) should also accept any strings that
are accepted otherwise. Asserting against empty strings is wrong. If the
setting wants to reject empty strings, then it should use verify().
This commit is contained in:
Thomas Haller 2021-06-02 14:00:46 +02:00
parent 46533cd15f
commit 92136135ad
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
2 changed files with 10 additions and 20 deletions

View file

@ -809,8 +809,7 @@ nm_setting_connection_add_secondary(NMSettingConnection *setting, const char *se
GSList * iter;
g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), FALSE);
g_return_val_if_fail(sec_uuid != NULL, FALSE);
g_return_val_if_fail(sec_uuid[0] != '\0', FALSE);
g_return_val_if_fail(sec_uuid, FALSE);
priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting);
for (iter = priv->secondaries; iter; iter = g_slist_next(iter)) {
@ -863,8 +862,7 @@ nm_setting_connection_remove_secondary_by_value(NMSettingConnection *setting, co
GSList * iter;
g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), FALSE);
g_return_val_if_fail(sec_uuid != NULL, FALSE);
g_return_val_if_fail(sec_uuid[0] != '\0', FALSE);
g_return_val_if_fail(sec_uuid, FALSE);
priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting);
for (iter = priv->secondaries; iter; iter = g_slist_next(iter)) {

View file

@ -96,8 +96,7 @@ void
nm_setting_match_add_interface_name(NMSettingMatch *setting, const char *interface_name)
{
g_return_if_fail(NM_IS_SETTING_MATCH(setting));
g_return_if_fail(interface_name != NULL);
g_return_if_fail(interface_name[0] != '\0');
g_return_if_fail(interface_name);
nm_strvarray_add(nm_strvarray_ensure(&setting->interface_name), interface_name);
_notify(setting, PROP_INTERFACE_NAME);
@ -138,8 +137,7 @@ gboolean
nm_setting_match_remove_interface_name_by_value(NMSettingMatch *setting, const char *interface_name)
{
g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE);
g_return_val_if_fail(interface_name != NULL, FALSE);
g_return_val_if_fail(interface_name[0] != '\0', FALSE);
g_return_val_if_fail(interface_name, FALSE);
if (nm_strvarray_remove_first(setting->interface_name, interface_name)) {
_notify(setting, PROP_INTERFACE_NAME);
@ -241,8 +239,7 @@ void
nm_setting_match_add_kernel_command_line(NMSettingMatch *setting, const char *kernel_command_line)
{
g_return_if_fail(NM_IS_SETTING_MATCH(setting));
g_return_if_fail(kernel_command_line != NULL);
g_return_if_fail(kernel_command_line[0] != '\0');
g_return_if_fail(kernel_command_line);
nm_strvarray_add(nm_strvarray_ensure(&setting->kernel_command_line), kernel_command_line);
_notify(setting, PROP_KERNEL_COMMAND_LINE);
@ -284,8 +281,7 @@ nm_setting_match_remove_kernel_command_line_by_value(NMSettingMatch *setting,
const char * kernel_command_line)
{
g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE);
g_return_val_if_fail(kernel_command_line != NULL, FALSE);
g_return_val_if_fail(kernel_command_line[0] != '\0', FALSE);
g_return_val_if_fail(kernel_command_line, FALSE);
if (nm_strvarray_remove_first(setting->kernel_command_line, kernel_command_line)) {
_notify(setting, PROP_KERNEL_COMMAND_LINE);
@ -383,8 +379,7 @@ void
nm_setting_match_add_driver(NMSettingMatch *setting, const char *driver)
{
g_return_if_fail(NM_IS_SETTING_MATCH(setting));
g_return_if_fail(driver != NULL);
g_return_if_fail(driver[0] != '\0');
g_return_if_fail(driver);
nm_strvarray_add(nm_strvarray_ensure(&setting->driver), driver);
_notify(setting, PROP_DRIVER);
@ -425,8 +420,7 @@ gboolean
nm_setting_match_remove_driver_by_value(NMSettingMatch *setting, const char *driver)
{
g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE);
g_return_val_if_fail(driver != NULL, FALSE);
g_return_val_if_fail(driver[0] != '\0', FALSE);
g_return_val_if_fail(driver, FALSE);
if (nm_strvarray_remove_first(setting->driver, driver)) {
_notify(setting, PROP_DRIVER);
@ -524,8 +518,7 @@ void
nm_setting_match_add_path(NMSettingMatch *setting, const char *path)
{
g_return_if_fail(NM_IS_SETTING_MATCH(setting));
g_return_if_fail(path != NULL);
g_return_if_fail(path[0] != '\0');
g_return_if_fail(path);
nm_strvarray_add(nm_strvarray_ensure(&setting->path), path);
_notify(setting, PROP_PATH);
@ -566,8 +559,7 @@ gboolean
nm_setting_match_remove_path_by_value(NMSettingMatch *setting, const char *path)
{
g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE);
g_return_val_if_fail(path != NULL, FALSE);
g_return_val_if_fail(path[0] != '\0', FALSE);
g_return_val_if_fail(path, FALSE);
if (nm_strvarray_remove_first(setting->path, path)) {
_notify(setting, PROP_PATH);