From 2432b7f326287aa43106fb38be0e23ae5618f006 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Thu, 17 Apr 2014 12:50:09 -0700 Subject: [PATCH] Fixing invalid BBcode filter state --- .../Common/BbcodeFilterTests.cs | 23 +++++++++++++++++++ .../Core/Common/Services/BbcodeFilter.cs | 15 ++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/Orchard.Core.Tests/Common/BbcodeFilterTests.cs b/src/Orchard.Core.Tests/Common/BbcodeFilterTests.cs index 0172995b1..984ac276d 100644 --- a/src/Orchard.Core.Tests/Common/BbcodeFilterTests.cs +++ b/src/Orchard.Core.Tests/Common/BbcodeFilterTests.cs @@ -34,5 +34,28 @@ namespace Orchard.Core.Tests.Common { var processed = _filter.ProcessContent(text, null); Assert.That(processed, Is.EqualTo("foo bar baz")); } + + [Test] + public void ShouldIgnoreMalformedUrl() { + const string text = "foo [url]bar baz"; + var processed = _filter.ProcessContent(text, null); + Assert.That(processed, Is.EqualTo("foo [url]bar baz")); + } + + [Test] + public void ShouldIgnoreMalformedUrlWithTitle() { + const string text = "foo [url=alink]bar baz"; + var processed = _filter.ProcessContent(text, null); + Assert.That(processed, Is.EqualTo("foo [url=alink]bar baz")); + } + + [Test] + public void ShouldIgnoreMalformedImg() { + const string text = "foo [img]bar baz"; + var processed = _filter.ProcessContent(text, null); + Assert.That(processed, Is.EqualTo("foo [img]bar baz")); + } + + } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/Services/BbcodeFilter.cs b/src/Orchard.Web/Core/Common/Services/BbcodeFilter.cs index 4ec096980..a6c7aea40 100644 --- a/src/Orchard.Web/Core/Common/Services/BbcodeFilter.cs +++ b/src/Orchard.Web/Core/Common/Services/BbcodeFilter.cs @@ -32,6 +32,11 @@ namespace Orchard.Core.Common.Services { foreach(var start in allIndexes) { var end = text.IndexOf("[/url]", start, StringComparison.Ordinal); + + if (end == -1) { + continue; + } + var url = text.Substring(start + 5 , end - start - 5); // substitue [url] by @@ -50,6 +55,11 @@ namespace Orchard.Core.Common.Services { foreach (var start in allIndexes) { var urlEnd = text.IndexOf("]", start, StringComparison.Ordinal); var end = text.IndexOf("[/url]", start, StringComparison.Ordinal); + + if (end == -1) { + continue; + } + var url = text.Substring(start + 5, urlEnd - start - 5); var title = text.Substring(urlEnd + 1, end - urlEnd - 1); @@ -68,6 +78,11 @@ namespace Orchard.Core.Common.Services { foreach (var start in allIndexes) { var end = text.IndexOf("[/img]", start, StringComparison.Ordinal); + + if (end == -1) { + continue; + } + var url = text.Substring(start + 5, end - start - 5); // substitue [url] by