From d89804d7c7b4923bc9132fa622de3b843bcf3904 Mon Sep 17 00:00:00 2001 From: Pat Murphy Date: Wed, 5 Jul 2017 16:56:43 -0700 Subject: [PATCH] Fix potential nullref in embedBuilder value setter (#734) * Fix potential nullref in embedBuilder value setter * Null check on footer iconUrl * Adding checks for the other URL properties * Adding IsNullOrUri extension * Setting StringExtensions as internal --- .../Extensions/StringExtensions.cs | 10 ++++++++++ .../Entities/Messages/EmbedBuilder.cs | 14 +++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 src/Discord.Net.Core/Extensions/StringExtensions.cs diff --git a/src/Discord.Net.Core/Extensions/StringExtensions.cs b/src/Discord.Net.Core/Extensions/StringExtensions.cs new file mode 100644 index 000000000..c0ebb2626 --- /dev/null +++ b/src/Discord.Net.Core/Extensions/StringExtensions.cs @@ -0,0 +1,10 @@ +using System; + +namespace Discord +{ + internal static class StringExtensions + { + public static bool IsNullOrUri(this string url) => + string.IsNullOrEmpty(url) || Uri.IsWellFormedUriString(url, UriKind.Absolute); + } +} diff --git a/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs b/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs index 2331f6749..7b0285891 100644 --- a/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs +++ b/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs @@ -44,7 +44,7 @@ namespace Discord get => _embed.Url; set { - if (!Uri.IsWellFormedUriString(value, UriKind.Absolute)) throw new ArgumentException("Url must be a well-formed URI", nameof(Url)); + if (!value.IsNullOrUri()) throw new ArgumentException("Url must be a well-formed URI", nameof(Url)); _embed.Url = value; } } @@ -53,7 +53,7 @@ namespace Discord get => _embed.Thumbnail?.Url; set { - if (!Uri.IsWellFormedUriString(value, UriKind.Absolute)) throw new ArgumentException("Url must be a well-formed URI", nameof(ThumbnailUrl)); + if (!value.IsNullOrUri()) throw new ArgumentException("Url must be a well-formed URI", nameof(ThumbnailUrl)); _embed.Thumbnail = new EmbedThumbnail(value, null, null, null); } } @@ -62,7 +62,7 @@ namespace Discord get => _embed.Image?.Url; set { - if (!Uri.IsWellFormedUriString(value, UriKind.Absolute)) throw new ArgumentException("Url must be a well-formed URI", nameof(ImageUrl)); + if (!value.IsNullOrUri()) throw new ArgumentException("Url must be a well-formed URI", nameof(ImageUrl)); _embed.Image = new EmbedImage(value, null, null, null); } } @@ -260,7 +260,7 @@ namespace Discord get => _field.Value; set { - var stringValue = value.ToString(); + var stringValue = value?.ToString(); if (string.IsNullOrEmpty(stringValue)) throw new ArgumentException($"Field value must not be null or empty.", nameof(Value)); if (stringValue.Length > MaxFieldValueLength) throw new ArgumentException($"Field value length must be less than or equal to {MaxFieldValueLength}.", nameof(Value)); _field.Value = stringValue; @@ -313,7 +313,7 @@ namespace Discord get => _author.Url; set { - if (!Uri.IsWellFormedUriString(value, UriKind.Absolute)) throw new ArgumentException("Url must be a well-formed URI", nameof(Url)); + if (!value.IsNullOrUri()) throw new ArgumentException("Url must be a well-formed URI", nameof(Url)); _author.Url = value; } } @@ -322,7 +322,7 @@ namespace Discord get => _author.IconUrl; set { - if (!Uri.IsWellFormedUriString(value, UriKind.Absolute)) throw new ArgumentException("Url must be a well-formed URI", nameof(IconUrl)); + if (!value.IsNullOrUri()) throw new ArgumentException("Url must be a well-formed URI", nameof(IconUrl)); _author.IconUrl = value; } } @@ -372,7 +372,7 @@ namespace Discord get => _footer.IconUrl; set { - if (!Uri.IsWellFormedUriString(value, UriKind.Absolute)) throw new ArgumentException("Url must be a well-formed URI", nameof(IconUrl)); + if (!value.IsNullOrUri()) throw new ArgumentException("Url must be a well-formed URI", nameof(IconUrl)); _footer.IconUrl = value; } }