OSDN Git Service

相対URIを含む文字列を ShortUrl.ExpandUrlHtmlAsync() に通すと UriFormatException が発生する問題の修正
authorKimura Youichi <kim.upsilon@bucyou.net>
Sat, 14 Jun 2014 01:45:36 +0000 (10:45 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sat, 14 Jun 2014 08:46:22 +0000 (17:46 +0900)
https://sourceforge.jp/ticket/browse.php?group_id=6526&tid=33946

OpenTween.Tests/ShortUrlTest.cs
OpenTween/Resources/ChangeLog.txt
OpenTween/ShortUrl.cs

index d034dcf..fb51943 100644 (file)
@@ -296,6 +296,28 @@ namespace OpenTween
             }
         }
 
+        [Fact]
+        public async Task ExpandUrlHtmlAsync_RelativeUriTest()
+        {
+            var handler = new HttpMessageHandlerMock();
+            using (var http = new HttpClient(handler))
+            {
+                var shortUrl = new ShortUrl(http);
+
+                handler.Enqueue(x =>
+                {
+                    // リクエストは送信されないはず
+                    Assert.True(false);
+                    return this.CreateRedirectResponse("http://example.com/hoge");
+                });
+
+                Assert.Equal("<a href=\"./hoge\">hogehoge</a>",
+                    await shortUrl.ExpandUrlHtmlAsync("<a href=\"./hoge\">hogehoge</a>"));
+
+                Assert.Equal(1, handler.QueueCount);
+            }
+        }
+
         private HttpResponseMessage CreateRedirectResponse(string uriStr)
         {
             var response = new HttpResponseMessage(HttpStatusCode.TemporaryRedirect);
index e979565..0eaf12b 100644 (file)
@@ -4,6 +4,7 @@
  * NEW: pic.twitter.com への複数枚画像の投稿に対応しました
   - 投稿先に Twitter を選択し、左端のコンボボックスを切り替えることで、最大 4 枚まで選択可能です
   - 投稿するファイルの数・サイズによっては、投稿完了までに若干の時間がかかります
+ * FIX: 一部クライアントから投稿されたツイートの読み込み時にエラーが発生する問題の修正
 
 ==== Ver 1.2.1(2014/05/26)
  * NEW: 5月28日(太平洋夏時間, UTC-7)から追加される予定の pic.twitter.com の複数枚画像表示に対応しました
index 1febf9a..b040230 100644 (file)
@@ -232,7 +232,18 @@ namespace OpenTween
         /// </summary>
         /// <param name="uriStr">展開するURL</param>
         /// <returns>URLの展開を行うタスク</returns>
-        public async Task<string> ExpandUrlStrAsync(string uriStr)
+        public Task<string> ExpandUrlStrAsync(string uriStr)
+        {
+            return this.ExpandUrlStrAsync(uriStr, 10);
+        }
+
+        /// <summary>
+        /// 短縮 URL を非同期に展開します
+        /// </summary>
+        /// <param name="uriStr">展開するURL</param>
+        /// <param name="redirectLimit">再帰的に展開を試みる上限</param>
+        /// <returns>URLの展開を行うタスク</returns>
+        public async Task<string> ExpandUrlStrAsync(string uriStr, int redirectLimit)
         {
             Uri uri;
 
@@ -248,7 +259,7 @@ namespace OpenTween
                 return uriStr;
             }
 
-            var expandedUri = await this.ExpandUrlAsync(uri, 10)
+            var expandedUri = await this.ExpandUrlAsync(uri, redirectLimit)
                 .ConfigureAwait(false);
 
             return expandedUri.OriginalString;
@@ -282,7 +293,7 @@ namespace OpenTween
                 return Task.FromResult(html);
 
             return HtmlLinkPattern.ReplaceAsync(html, async m =>
-                m.Groups[1].Value + await this.ExpandUrlAsync(new Uri(m.Groups[2].Value), redirectLimit).ConfigureAwait(false) + m.Groups[3].Value);
+                m.Groups[1].Value + await this.ExpandUrlStrAsync(m.Groups[2].Value, redirectLimit).ConfigureAwait(false) + m.Groups[3].Value);
         }
 
         /// <summary>