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