OpenPNE Issue Tracking System: チケット
http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2016-07-27T11:32:27Z
OpenPNE Issue Tracking System
Redmine
opBlogPlugin - Bug(バグ) #3986 (Accepted(着手)): v0.9.0からv1.0.2へのマイグレーション後とv1.0.2のクリーンインストール後でDBスキーマに...
http://redmine.openpne.jp/issues/3986
2016-07-27T11:32:27Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>マイグレーションスクリプトの不備により v1.0.2 へのマイグレーションと v1.0.2 のクリーンインストール後で <code>blog_rss_cache</code> テーブルのスキーマに差異が生じている。</p>
<pre>
$ cd plugins/opBlogPlugin
$ git checkout v0.9.0
$ ../../symfony doctrine:build --env=test --all --and-load
$ git checkout v1.0.2
$ ../../symfony openpne:migrate --env=test --no-update-plugin --target=opBlogPlugin
$ echo 'SHOW CREATE TABLE blog_rss_cache\G' | mysql -u root openpne_test > schema-migrate.txt
$ ../../symfony doctrine:build --env=test --all --and-load
$ echo 'SHOW CREATE TABLE blog_rss_cache\G' | mysql -u root openpne_test > schema-rebuild.txt
$ diff -u schema-migrate.txt schema-rebuild.txt
</pre>
<pre><code class="diff syntaxhl"><span class="CodeRay"><span class="line head"><span class="head">--- </span><span class="filename">schema-migrate.txt 2016-07-27 17:45:29.927593471 +0900</span></span>
<span class="line head"><span class="head">+++ </span><span class="filename">schema-rebuild.txt 2016-07-27 17:46:18.371593471 +0900</span></span>
<span class="line change"><span class="change">@@</span> -11,5 +11,7 <span class="change">@@</span></span>
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `date_INDEX_idx` (`date`),
<span class="line delete"><span class="delete">-</span> KEY `member_id_date_idx` (`member_id`,`date`)</span>
<span class="line insert"><span class="insert">+</span> KEY `member_id_date_idx` (`member_id`,`date`),</span>
<span class="line insert"><span class="insert">+</span> KEY `member_id_idx` (`member_id`),</span>
<span class="line insert"><span class="insert">+</span> CONSTRAINT `blog_rss_cache_member_id_member_id` FOREIGN KEY (`member_id`) REFERENCES `member` (`id`)</span>
) ENGINE=InnoDB DEFAULT CHARSET=utf8
</span></code></pre>
<p>不足している箇所:</p>
<ul>
<li>インデックス <code>member_id_idx</code> (Doctrine によって自動で追加されたもの) が追加されていない</li>
<li>外部キー制約 <code>blog_rss_cache_member_id_member_id</code> が追加されていない</li>
</ul>
<p>特に <code>blog_rss_cache_member_id_member_id</code> が存在しない不一致については、v1.0.3 で修正された <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): opBlogPlugin を使用しているメンバーが退会しようとすると500エラーとなる (Fixed(完了))" href="http://redmine.openpne.jp/issues/3473">#3473</a> に関するマイグレーション時に問題となる。<br />具体的には v0.9.0 をクリーンインストールした状態から v1.0.3 にマイグレーションすると下記のエラーが発生して異常終了する。</p>
<pre>
migrating of opBlogPlugin encountered the following errors:
Error #1 - SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'blog_rss_cache_member_id_member_id'; check that column/key exists. Failing Query: "ALTER TABLE `blog_rss_cache` DROP FOREIGN KEY blog_rss_cache_member_id_member_id"
</pre>
<p>このエラーが発生した場合、マイグレーションが途中まで完了した状態かつ <code>opBlogPlugin_revision</code> が更新されないままロールバックされずに中断されるため、復旧が困難な <strong>非常に面倒な状態になる</strong>。(チケットの優先度を高めにしたのはこのため)</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><code>data/migrations/1.0.0/001_add_blog_rss_cache_table.php</code> に必要な定義が不足していたことが原因。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正にあたって下記のパターンを考慮する必要がある。</p>
<ul>
<li>v0.9.0 をクリーンインストールした状態から最新版にマイグレーション
<ul>
<li><code>opBlogPlugin_revision</code> が存在しない状態からリビジョン 1, 2, 3, 4 の差分が一度に適用される</li>
<li>この場合、リビジョン 1 を直接修正することで <code>blog_rss_cache_member_id_member_id</code> を追加できる</li>
<li>一方で、リビジョン 1 を修正したとしても、追加された <code>blog_rss_cache_member_id_member_id</code> の存在をリビジョン 4 の up メソッド内でチェックすることはできない</li>
<li>各リビジョンの up メソッド内で呼ばれる addForeignKey などのメソッドは即時に SQL として実行されるものではない(全てのリビジョンの up メソッドが呼ばれた後に一度に実行される)</li>
</ul>
</li>
<li>v0.9.0 をクリーンインストールした状態から一度 v1.0.2 にマイグレーションしてから最新版にマイグレーション
<ul>
<li><code>opBlogPlugin_revision</code> が存在しない状態からリビジョン 1, 2, 3 の差分が適用され、その後リビジョン 4 が適用される</li>
<li>修正前のリビジョン 1 がすでに適用された状態からのマイグレーション</li>
<li>リビジョン 4 が実行される時点では <code>blog_rss_cache_member_id_member_id</code> が存在しない状態</li>
</ul>
</li>
<li>v1.0.2 をクリーンインストールした状態から最新版にマイグレーション
<ul>
<li><code>opBlogPlugin_revision</code> が 3 の状態からリビジョン 4 が適用される</li>
<li>リビジョン 4 が実行される時点では <code>blog_rss_cache_member_id_member_id</code> が存在する状態</li>
</ul>
</li>
<li>最新版をクリーンインストール</li>
</ul>
<p>上記の全てのパターンでインストールまたはマイグレーションが正常に完了し、かつ最終的な <code>blog_rss_cache</code> テーブルのスキーマが同一でなければならない。</p>
OpenPNE 3 - Bug(バグ) #3933 (New(新規)): 利用可能な認証プラグインが無い状態でログイン画面を開くとFatal errorになる
http://redmine.openpne.jp/issues/3933
2016-04-21T11:04:17Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>管理画面の「認証プラグイン設定」(/pc_backend.php/plugin/list?type=auth) から認証プラグインの設定ページを開き、全ての認証プラグインで「PC版有効設定」を「無効にする」に設定した状態で PC 版のログイン画面を開くと HTTP 500 エラーとなり、Web ブラウザ側にはエラーメッセージ等もない真っ白なページが表示される。</p>
<p>Apache 等のエラーログには下記のようなエラーが記録される:</p>
<pre>
[Thu Apr 21 10:30:57.453033 2016] [fcgid:warn] [pid 1331:tid 140111127688960] [client 10.0.2.2:49636] mod_fcgid: stderr: PHP Fatal error: Cannot instantiate abstract class opAuthAdapter in /var/www/sns/op36.localhost/lib/user/opAdaptableUser.class.php on line 99, referer: http://op36.localhost:8080/
</pre>
<p>類似の設定として、管理画面の「SNS設定」には「PC版使用設定」「携帯版使用設定」があるが、ここで無効に設定した場合は「このページにはアクセスできません。」とエラーメッセージが表示される。<br />認証プラグインの「PC版有効設定」および「携帯版有効設定」は、PC 版のみアクセス可能な SNS として設定したいなどの目的で無効に設定する可能性があるが、当チケットの現象ではユーザー側にメッセージを表示することもなく Fatal error で異常終了するという形で SNS が利用できなくなるため、「PC版使用設定」「携帯版使用設定」と比べて不親切である。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/43190aa1/entry/lib/user/opAdaptableUser.class.php#L28">source:lib/user/opAdaptableUser.class.php@43190aa1#L28</a></p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">public</span> <span class="keyword">function</span> <span class="function">initialize</span>(sfEventDispatcher <span class="local-variable">$dispatcher</span>, sfStorage <span class="local-variable">$storage</span>, <span class="local-variable">$options</span> = <span class="predefined">array</span>())
{
<span class="predefined-constant">parent</span>::initialize(<span class="local-variable">$dispatcher</span>, <span class="local-variable">$storage</span>, <span class="local-variable">$options</span>);
<span class="keyword">if</span> (<span class="local-variable">$this</span>->getMemberId() && <span class="local-variable">$this</span>->isTimedOut())
{
<span class="local-variable">$this</span>->getAttributeHolder()->removeNamespace(<span class="string"><span class="delimiter">'</span><span class="content">opSecurityUser</span><span class="delimiter">'</span></span>);
}
<span class="local-variable">$request</span> = sfContext::getInstance()->getRequest();
<span class="local-variable">$authMode</span> = <span class="local-variable">$request</span>->getUrlParameter(<span class="string"><span class="delimiter">'</span><span class="content">authMode</span><span class="delimiter">'</span></span>);
<span class="keyword">if</span> (<span class="local-variable">$authMode</span>)
{
<span class="local-variable">$this</span>->setCurrentAuthMode(<span class="local-variable">$authMode</span>);
}
<span class="local-variable">$this</span>->createAuthAdapter(<span class="local-variable">$this</span>->getCurrentAuthMode());
}
</span></code></pre>
<p>上記のコードで、利用可能な認証プラグインが存在しない状態で <code>$this->getCurrentAuthMode()</code> が呼び出されると null が返るが、このメソッドではそのことが考慮されておらず <code>$this->createAuthAdapter()</code> の <code>$authMode</code> に null を渡してしまう。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">function</span> <span class="function">getAuthAdapterClassName</span>(<span class="local-variable">$authMode</span>)
{
<span class="keyword">return</span> <span class="string"><span class="delimiter">'</span><span class="content">opAuthAdapter</span><span class="delimiter">'</span></span>.<span class="predefined">ucfirst</span>(<span class="local-variable">$authMode</span>);
}
</span></code></pre>
<p>途中の呼び出し過程は省略するが、上記の <code>opAdaptableUser::getAuthAdapterClassName()</code> メソッドにも <code>$authMode</code> が null の状態で呼び出され、<code>'opAuthAdapter'</code> の文字列が返される。そして <code>opAuthAdapter</code> クラスを new でインスタンス化しようとすることで Fatal error が発生する。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
opOpenSocialPlugin - Bug(バグ) #3932 (New(新規)): pc,mobile両方のContentを持つアプリがホーム画面およびプロフィール画面に表示されない
http://redmine.openpne.jp/issues/3932
2016-04-20T10:32:46Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p><a class="external" href="https://gist.github.com/upsilon/951203">https://gist.github.com/upsilon/951203</a> のように PC, mobile 向けの両方の Content を持つアプリが、ホーム画面とプロフィール画面の「アプリケーションボックス」ガジェットの位置に表示されない。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a class="source" href="http://redmine.openpne.jp/projects/plg-open-social/repository/revisions/6d81bffd/entry/apps/pc_frontend/modules/application/actions/components.class.php#L106">source:apps/pc_frontend/modules/application/actions/components.class.php@6d81bffd#L106</a></p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">public</span> <span class="keyword">function</span> <span class="function">executeRenderHomeApplications</span>(sfWebRequest <span class="local-variable">$request</span>)
{
<span class="local-variable">$this</span>->memberApplications = <span class="constant">Doctrine</span>::getTable(<span class="string"><span class="delimiter">'</span><span class="content">MemberApplication</span><span class="delimiter">'</span></span>)->getMemberApplications(<span class="predefined-constant">null</span>, <span class="predefined-constant">null</span>, <span class="predefined-constant">true</span>, <span class="predefined-constant">true</span>, <span class="predefined-constant">false</span>);
}
</span></code></pre>
<p>ホーム画面でアプリケーションを表示するアクションでは、上記のように <code>MemberApplicationTable::getMemberApplications()</code> メソッドの引数 <code>$isMobile</code> に false を指定している。</p>
<p><code>MemberApplicationTable::getMemberApplications()</code> メソッドの引数 <code>$isPc</code>, <code>$isMobile</code> は true, false, null の三値が想定されており、true, false の場合は <code>application.is_pc = ?</code> のような条件が加わり、null の場合は is_pc, is_mobile のそれぞれに対する条件が付かなくなる。<br />この場合、<code>$isPc</code> に true、<code>$isMobile</code> に false が指定されているため、<code>application.is_pc = 1 AND application.is_mobile = 0</code> のような条件が加わることになり、is_mobile が 1 であるアプリケーションは is_pc の値に関わらず条件に該当しなくなる。</p>
<p>このことが、mobile 向け Content を持つアプリケーションが PC 向けの Content も持つか否かに関わらずホーム画面およびプロフィール画面で非表示となる原因である。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>pc_frontend のホーム画面およびプロフィール画面の場合、<code>application.is_mobile</code> の値に関わらず <code>application.is_pc = 1</code> のみ満たしていれば十分であるため、<code>MemberApplicationTable::getMemberApplications()</code> メソッドの引数 <code>$isMobile</code> には false ではなく null に修正する必要がある。</p>
OpenPNE 3 - Bug(バグ) #3931 (New(新規)): Zend_Validate_Hostnameクラスで .com, .biz, .cn ドメインのホスト名がエラーになる
http://redmine.openpne.jp/issues/3931
2016-04-18T08:11:24Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>Zend_Validate_Hostname を使用する機能で .com, .biz, .cn ドメインのホスト名または URL がエラーになる。<br />この不具合は OpenPNE <strong>3.4.x</strong> および <strong>3.6.x</strong> のみで発生する。</p>
<p>具体的には、下記の機能で問題が発生する。</p>
<ul>
<li>OpenPNE.yml の <code>mail_smtp_host</code>
<ul>
<li>例: <code>smtp.gmail.com</code> を使用したメール送信が行えない<pre><code class="yaml syntaxhl"><span class="CodeRay"><span class="key">mail_smtp_host</span>: <span class="string"><span class="delimiter">"</span><span class="content">smtp.gmail.com</span><span class="delimiter">"</span></span>
<span class="key">mail_smtp_config</span>:
<span class="key">auth</span>: <span class="string"><span class="delimiter">"</span><span class="content">login</span><span class="delimiter">"</span></span>
<span class="key">username</span>: <span class="string"><span class="delimiter">"</span><span class="content">*****@gmail.com</span><span class="delimiter">"</span></span>
<span class="key">password</span>: <span class="string"><span class="delimiter">"</span><span class="content">*****</span><span class="delimiter">"</span></span>
<span class="key">ssl</span>: <span class="string"><span class="delimiter">"</span><span class="content">tls</span><span class="delimiter">"</span></span>
<span class="key">port</span>: <span class="string"><span class="content">587 </span></span>
</span></code></pre></li>
<li>発生するエラーの例: <a href="#" onclick="$('#collapse-c78eb3fe-show, #collapse-c78eb3fe-hide').toggle(); $('#collapse-c78eb3fe').fadeToggle(150);; return false;" id="collapse-c78eb3fe-show" class="collapsible collapsed">詳細を表示...</a><a href="#" onclick="$('#collapse-c78eb3fe-show, #collapse-c78eb3fe-hide').toggle(); $('#collapse-c78eb3fe').fadeToggle(150);; return false;" id="collapse-c78eb3fe-hide" class="collapsible" style="display:none;">詳細を表示...</a><div id="collapse-c78eb3fe" class="collapsed-text" style="display:none;"><pre>
$ ./symfony openpne:send-daily-news --app=pc_frontend --trace
[Zend_Validate_Exception]
Internal error: DNS validation failed
Exception trace:
at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Validate/Hostname.php:365
Zend_Validate_Hostname->isValid at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Validate.php:94
Zend_Validate->isValid at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Mail/Protocol/Abstract.php:133
Zend_Mail_Protocol_Abstract->__construct at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Mail/Protocol/Smtp.php:156
Zend_Mail_Protocol_Smtp->__construct at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Mail/Protocol/Smtp/Auth/Login.php:76
Zend_Mail_Protocol_Smtp_Auth_Login->__construct at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Mail/Transport/Smtp.php:196
Zend_Mail_Transport_Smtp->_sendMail at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Mail/Transport/Abstract.php:348
Zend_Mail_Transport_Abstract->send at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Mail.php:936
Zend_Mail->send at /home/upsilon/git/openpne3/v3.6/lib/util/opMailSend.class.php:218
opMailSend::execute at /home/upsilon/git/openpne3/v3.6/lib/util/opMailSend.class.php:156
opMailSend::sendTemplateMail at /home/upsilon/git/openpne3/v3.6/lib/task/openpneSendDailyNewsTask.class.php:112
openpneSendDailyNewsTask->sendDailyNews at /home/upsilon/git/openpne3/v3.6/lib/task/openpneSendDailyNewsTask.class.php:43
openpneSendDailyNewsTask->execute at /home/upsilon/git/openpne3/v3.6/lib/vendor/symfony/lib/task/sfBaseTask.class.php:68
sfBaseTask->doRun at /home/upsilon/git/openpne3/v3.6/lib/vendor/symfony/lib/task/sfTask.class.php:97
sfTask->runFromCLI at /home/upsilon/git/openpne3/v3.6/lib/vendor/symfony/lib/command/sfSymfonyCommandApplication.class.php:76
sfSymfonyCommandApplication->run at /home/upsilon/git/openpne3/v3.6/lib/vendor/symfony/lib/command/cli.php:20
include at /home/upsilon/git/openpne3/v3.6/symfony:14
</pre></div></li>
</ul>
</li>
<li>opOpenSocialPlugin のアプリ追加
<ul>
<li>例: 管理画面の「アプリ追加」(/pc_backend_dev.php/opOpenSocialPlugin/add) で <code>Gadget XML URL</code> に <code>gist.github.com</code> などのドメインの URL を指定するとエラーになる</li>
</ul></li>
</ul>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): ZendFrameworkがあるとインストールに失敗する (Fixed(完了))" href="http://redmine.openpne.jp/issues/205">#205</a> で起きた問題の修正のために、<code>Zend_Validate_Hostname</code> に対して master ブランチと安定版ブランチで異なる修正が行われた。</p>
<p><a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): ZendFrameworkがあるとインストールに失敗する (Fixed(完了))" href="http://redmine.openpne.jp/issues/205#note-6">#205-6</a> より引用:</p>
<blockquote>
<p>次の方針で実装します。</p>
<ul>
<li>OpenPNE 3.7.0 : 同梱する ZendFramework の最新の安定版にアップデートします</li>
<li>OpenPNE 3.6 以前 : ZendFramework の最新の安定版に存在する Zend/Validate/Hostname/*.php に対応するファイルが同梱している ZendFramework に存在していなければ、最新の安定版で配布されている Zend/Validate/Hostname/*.php とほぼ近い挙動になるようなクラスファイルを追加するという暫定的な対処をおこないます</li>
</ul>
</blockquote>
<p>この修正により OpenPNE 3.6.x には <a class="changeset" title="added a workaround for avoiding the problem that is a newer ZendFramework in 'include_path' direc..." href="http://redmine.openpne.jp/projects/op3/repository/revisions/fbdbb2163b906a0a604b512445c649411b0bf8bd">fbdbb216</a> の修正が行われたが、「最新の安定版で配布されている Zend/Validate/Hostname/*.php とほぼ近い挙動になるようなクラスファイル」が正しく機能しなかったため今回の不具合が起きた。</p>
<a name="biz-cn-ドメインの場合に発生するエラー"></a>
<h4 >*.biz, *.cn ドメインの場合に発生するエラー<a href="#biz-cn-ドメインの場合に発生するエラー" class="wiki-anchor">¶</a></h4>
<pre>
PHP Warning: preg_match(): Compilation failed: regular expression is too large at offset 156194 in /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Validate/Hostname.php on line 358
</pre>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/fbdbb216/entry/lib/vendor/Zend/Validate/Hostname/Biz.php">source:lib/vendor/Zend/Validate/Hostname/Biz.php@fbdbb216</a> のパターンは 207,460 文字、 <a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/fbdbb216/entry/lib/vendor/Zend/Validate/Hostname/Cn.php">source:lib/vendor/Zend/Validate/Hostname/Cn.php@fbdbb216</a> のパターンは 156,176 文字と非常に巨大な正規表現パターンとなっており、このことがエラーの原因であると考えられる。</p>
<p>3.7.0 以降に対して修正された <a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/821abff4/entry/lib/vendor/Zend/Validate/Hostname/Biz.php">source:lib/vendor/Zend/Validate/Hostname/Biz.php@821abff4</a> は複数に分割された正規表現パターンを使用してドメイン名をチェックしているため今回のような問題は発生していない。</p>
<a name="com-ドメインの場合に発生するエラー"></a>
<h4 >*.com ドメインの場合に発生するエラー<a href="#com-ドメインの場合に発生するエラー" class="wiki-anchor">¶</a></h4>
<pre>
PHP Warning: preg_match(): Compilation failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 9800 in /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Validate/Hostname.php on line 358
</pre>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/fbdbb216/entry/lib/vendor/Zend/Validate/Hostname/Com.php">source:lib/vendor/Zend/Validate/Hostname/Com.php@fbdbb216</a> の正規表現パターンには <code>\x{D800}-\x{DB7F}\x{DC00}-\x{DFFF}</code> が含まれており、この部分がサロゲートペアで使用する領域に該当するため上記のエラーが発生したと考えられる。<br />実際にこの部分を除去すると *.com ドメインのホスト名でエラーになる現象は起きなくなった。<br />(サロゲートペアを含むドメインは <code>Zend_Validate_Hostname::isValid()</code> で false になるが、これは <a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): ZendFrameworkがあるとインストールに失敗する (Fixed(完了))" href="http://redmine.openpne.jp/issues/205">#205</a> の対応前および OpenPNE 3.7.0 以降の動作と同じである)</p>
<p>コードポイント U+D800 から U+DFFF までの範囲は UTF-16 でサロゲートペアの high surrogates および low surrogates のために確保された領域であり、これらの領域では high surrogates と low surrogates の 2 つの符号で 1 文字として扱うためいずれか単体が正規表現パターンにマッチすることはない。<br />例えば、*.com ドメインでの使用が認められている <a href="http://www.unicode.org/charts/PDF/U10280.pdf" class="external">リュキア文字</a> はサロゲートペアで表される領域の文字であり、「𐊀」(<code>LYCIAN LETTER A</code>) であれば UTF-16 では 0xD800 0xDE80 の組で 1 文字として扱われるが <code>/[\x{D800}-\x{DFFF}]/u</code> のような正規表現パターンを用いてもどちらの符号にもマッチしない(サロゲートペアは U+10000 以降のコードポイントで表され、<code>LYCIAN LETTER A</code> の場合は U+10280 であるため <code>/\x{10280}/u</code> であればマッチする)</p>
<pre>
$ cat hoge.php
<?php
$str = mb_convert_encoding(pack('H*', 'D800DE80'), 'UTF-8', 'UTF-16BE');
var_dump(preg_match('/[\x{D800}-\x{DFFF}]/u', $str));
var_dump(preg_match('/\x{10280}/u', $str));
$ php hoge.php
PHP Warning: preg_match(): Compilation failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 7 in /home/upsilon/git/openpne3/master/hoge.php on line 4
Warning: preg_match(): Compilation failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 7 in /home/upsilon/git/openpne3/master/hoge.php on line 4
bool(false)
int(1)
</pre>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE 3 - Bug(バグ) #3367 (New(新規)): デイリーニュースで使用されるガジェットのパラメータがエスケープされている
http://redmine.openpne.jp/issues/3367
2013-06-25T12:38:21Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>管理画面のガジェット設定 (/design/gadget?type=dailyNews) からデイリーニュースで使用するガジェットを設定できるが、このガジェットのパラメーターに対してエスケープが施された状態でメール送信されてしまう。<br />例えば、デイリーニュースのガジェットに「フリーエリア」を追加して「内容」に「>>>> aaaaa <<<<」を設定すると、送信されるデイリーニュースのメール本文には「>>>> aaaaa <<<<」が出力される。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>メールテンプレートにおけるエスケープ処理の問題は <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): The Parameter will be escape in the mail (メールに含まれるパラメータがエスケープされている) (Fixed(完了))" href="http://redmine.openpne.jp/issues/1344">#1344</a> によって修正されており、その修正内容は下記のようなものでした。</p>
<pre><code class="diff syntaxhl"><span class="CodeRay"><span class="line head"><span class="head">--- </span><span class="filename">a/lib/util/opMailSend.class.php</span></span>
<span class="line head"><span class="head">+++ </span><span class="filename">b/lib/util/opMailSend.class.php</span></span>
<span class="change"><span class="change">@@</span> -81,6 +82,7 <span class="change">@@</span></span> <span class="keyword">class</span> <span class="class">opMailSend</span>
<span class="local-variable">$view</span> = <span class="keyword">new</span> sfTemplatingComponentPartialView(<span class="local-variable">$context</span>, <span class="string"><span class="delimiter">'</span><span class="content">superGlobal</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">notify_mail:</span><span class="delimiter">'</span></span>.<span class="local-variable">$target</span>.<span class="string"><span class="delimiter">'</span><span class="content">_</span><span class="delimiter">'</span></span>.<span class="local-variable">$template</span>, <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>);
<span class="local-variable">$context</span>->set(<span class="string"><span class="delimiter">'</span><span class="content">view_instance</span><span class="delimiter">'</span></span>, <span class="local-variable">$view</span>);
<span class="line insert"><span class="insert">+</span> <span class="local-variable">$view</span>->getAttributeHolder()->setEscaping(<span class="predefined-constant">false</span>);</span>
<span class="local-variable">$view</span>->setPartialVars(<span class="local-variable">$params</span>);
<span class="local-variable">$view</span>->setAttribute(<span class="string"><span class="delimiter">'</span><span class="content">renderer_config</span><span class="delimiter">'</span></span>, <span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">twig</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">opTemplateRendererTwig</span><span class="delimiter">'</span></span>));
<span class="local-variable">$view</span>->setAttribute(<span class="string"><span class="delimiter">'</span><span class="content">rule_config</span><span class="delimiter">'</span></span>, <span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">notify_mail</span><span class="delimiter">'</span></span> => <span class="predefined">array</span>(
</span></code></pre>
<p>一方、デイリーニュースの送信には、メールテンプレートこそ使用しているものの本文中で include_component を使用しており、呼び出されるコンポーネントのために新たに sfViewParameterHolder が生成されます。この sfViewParameterHolder は呼び出し元ビューのエスケープ設定を引き継がず、sfConfig から sf_escaping_method や sf_escaping_strategy の値を取得して設定するため、コンポーネント内では <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): The Parameter will be escape in the mail (メールに含まれるパラメータがエスケープされている) (Fixed(完了))" href="http://redmine.openpne.jp/issues/1344">#1344</a> の修正による効果が及ばないことになります。これが原因で、デイリーニュースのガジェット内ではエスケープが有効な状態でテンプレートが出力されます。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE 3 - Bug(バグ) #3357 (New(新規)): ./symfony cc を実行しても web/cache/ ディレクトリ以下に生成されたキャッシュが削除されない
http://redmine.openpne.jp/issues/3357
2013-06-06T06:40:54Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>ブラウザ等でメンバー画像 (no_image ではない) などユーザーが投稿した画像のサムネイルを表示すると web/cache/ ディレクトリ以下にサムネイル画像のキャッシュが生成されるが、ここに生成された画像が ./symfony cc コマンドによって削除されない状態となっている。</p>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>web/cache/ ディレクトリのキャッシュ削除は opApplicationConfiguration::clearWebCache() メソッドによって行われていた。このメソッドは task.cache.clear イベントの発生によって駆動するよう設計されているが、現状 task.cache.clear イベントは下記の理由により発生する事がないため、結果として一部のキャッシュが削除されない現象が発生している。</p>
<p>task.cache.clear イベントは ./symfony cc コマンド (sfCacheClearTask クラス) 実行時に <strong>アプリケーション毎に</strong> (pc_frontend, pc_backend, mobile_frontend など) 複数回呼び出されるイベントである。その仕組みは、symfony標準のディレクトリ階層の</p>
<ul>
<li>cache/
<ul>
<li>pc_frontend/
<ul>
<li>prod/</li>
<li>dev/</li>
</ul>
</li>
<li>pc_backend/
<ul>
<li>...</li>
</ul></li>
</ul></li>
</ul>
<p>に基づいて、 <strong>cache/ ディレクトリ直下</strong> に存在するアプリケーション名 (この場合、pc_frontend と pc_backend が存在する) ごとに task.cache.clear イベントを発生させるものとなっている。<br />しかし現状のOpenPNEでは、 <a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): Can't execute openpne:execute-mail-action bacause of permisson of cache/cli directory (Fixed(完了))" href="http://redmine.openpne.jp/issues/957">#957</a> の修正によって cache/ ディレクトリの階層構造がUNIXユーザー単位で分離されるようになり</p>
<ul>
<li>cache/
<ul>
<li>www-data/
<ul>
<li>pc_frontend/
<ul>
<li>dev/</li>
<li>prod/</li>
</ul>
</li>
</ul>
</li>
<li>john/
<ul>
<li>pc_frontend/
<ul>
<li>dev/</li>
<li>prod/</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
<p>となっているため、www-data や john といったアプリケーションは存在しないといった判断され task.cache.clear イベントが実行されない。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE 3 - Bug(バグ) #3196 (New(新規)): cacheディレクトリのパーミッションが適切でない
http://redmine.openpne.jp/issues/3196
2012-09-11T06:55:03Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>現状の実装では、cache ディレクトリ内のファイルは 0666 (rw-rw-rw-)、ディレクトリは 0777 (rwxrwxrwx) と過大な権限が設定されている。この実装については、</p>
<p><a class="external" href="http://trac.openpne.jp/ticket/3246#comment:7">http://trac.openpne.jp/ticket/3246#comment:7</a></p>
<blockquote>
<p>r10242, r10244, r10245 で修正しました。</p>
<p>基本的には symfony 側もしくは OpenPNE 側で作成するディレクトリに関しては 0777 、ファイルに関しては 0666 というパーミッションになるように修正をおこなっています。</p>
<p>この修正は正当なユーザ以外のファイル・ディレクトリに関する操作を許してしまうので、セキュリティ面では弱くなってしまいます。これはあくまでより多くの環境で使用していただくための措置であり、決して恒久的な対処であってはならないことを念頭に置かねばなりません。</p>
</blockquote>
<p>と書かれており、適切なパーミッションへの修正が必要である。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE3 Debian Package - Bug(バグ) #2141 (New(新規)): インストール時に /usr/share/openpne3/lib/filter/ にファイル...
http://redmine.openpne.jp/issues/2141
2011-05-30T21:58:31Z
Youichi Kimura
kim.upsilon@bucyou.net
OpenPNE3 Debian Package - Bug(バグ) #2140 (New(新規)): openpne3パッケージをインストール後にpurgeしても /var/lib/openpn...
http://redmine.openpne.jp/issues/2140
2011-05-30T21:55:04Z
Youichi Kimura
kim.upsilon@bucyou.net
opOpenSocialPlugin - Bug(バグ) #1990 (New(新規)): [pc] アクティビティの連投制限に引っ掛かった場合でもhadError()がfalseを返してしまう
http://redmine.openpne.jp/issues/1990
2011-03-31T07:30:06Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>下記のようなコードでアクティビティを投稿して連続投稿の制限に引っ掛かった場合でも<code>response.hadError()</code>がfalseを返してしまう。</p>
<pre><code class="javascript syntaxhl"><span class="CodeRay"><span class="keyword">var</span> params = {};
params[opensocial.Activity.Field.TITLE] = <span class="string"><span class="delimiter">"</span><span class="content">テスト</span><span class="delimiter">"</span></span>;
<span class="keyword">var</span> activity = opensocial.newActivity(params);
opensocial.requestCreateActivity(activity, opensocial.CreateActivityPriority.LOW, <span class="keyword">function</span>(response) {
<span class="keyword">if</span> (response.hadError())
alert(<span class="string"><span class="delimiter">'</span><span class="content">error</span><span class="delimiter">'</span></span>);
<span class="keyword">else</span>
alert(<span class="string"><span class="delimiter">'</span><span class="content">successed</span><span class="delimiter">'</span></span>);
});
</span></code></pre>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>バグが発生した原因を記入</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
opAshiatoPlugin - Bug(バグ) #1978 (New(新規)): MySQL以外のDBMS上であしあと一覧がエラーになる
http://redmine.openpne.jp/issues/1978
2011-03-26T05:48:58Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>あしあと一覧ページをSQLite使用のOpenPNE3で実行すると、以下のようなエラーが出ます。<br /><pre>
mod_fcgid: stderr: SQLSTATE[HY000]: General error: 1 near "DESC": syntax error. Failing Query: "SELECT a.id AS a__id, a.r_date AS a__r_date FROM ashiato a WHERE (a.member_id_to = ?) GROUP BY a.r_date DESC LIMIT 30", referer: http://sns.localhost/sqlite/
</pre></p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>「GROUP BY a.r_date DESC」といった構文がMySQL依存のものであるため、他のDBMSでエラーになる。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>PluginAshiatoTable::getAshiatoListPager() 内で実行されるクエリを修正する。</p>
<pre><code class="diff syntaxhl"><span class="CodeRay"><span class="line head"><span class="head">--- </span><span class="filename">a/lib/model/doctrine/PluginAshiatoTable.class.php</span></span>
<span class="line head"><span class="head">+++ </span><span class="filename">b/lib/model/doctrine/PluginAshiatoTable.class.php</span></span>
<span class="change"><span class="change">@@</span> -23,7 +23,7 <span class="change">@@</span></span> <span class="keyword">class</span> <span class="class">PluginAshiatoTable</span> <span class="keyword">extends</span> <span class="constant">Doctrine_Table</span>
<span class="keyword">public</span> <span class="keyword">function</span> <span class="function">getAshiatoListPager</span>(<span class="local-variable">$memberId</span>, <span class="local-variable">$page</span> = <span class="integer">1</span>, <span class="local-variable">$size</span> = <span class="integer">20</span>)
{
<span class="local-variable">$day_list</span> = <span class="predefined">array</span>();
<span class="local-variable">$q</span> = <span class="local-variable">$this</span>->createQuery()
->select(<span class="string"><span class="delimiter">'</span><span class="content">id, r_date</span><span class="delimiter">'</span></span>)
->where(<span class="string"><span class="delimiter">'</span><span class="content">member_id_to = ?</span><span class="delimiter">'</span></span>, <span class="local-variable">$memberId</span>)
<span class="line delete"><span class="delete">-</span> -><span class="eyecatcher">group</span>By(<span class="string"><span class="delimiter">'</span><span class="content">r_date DESC</span><span class="delimiter">'</span></span>)</span>
<span class="line insert"><span class="insert">+</span> -><span class="eyecatcher">order</span>By(<span class="string"><span class="delimiter">'</span><span class="content">r_date DESC</span><span class="delimiter">'</span></span>)</span>
->limit(<span class="local-variable">$size</span>);
</span></code></pre>
OpenPNE 3 - Bug(バグ) #1936 (Fixed(完了)): opAnonymousMember クラスにStrict Standardsエラーが含まれている
http://redmine.openpne.jp/issues/1936
2011-03-01T08:14:16Z
Youichi Kimura
kim.upsilon@bucyou.net
<p>error_reporting に E_STRICT を設定している環境において、以下のエラーが出力される場合があります。</p>
<code><pre>
PHP Strict Standards: Declaration of opAnonymousMember::getConfig() should be compatible with that of Member::getConfig() in /home/upsilon/git/openpne3/sqlite/lib/user/opAnonymousMember.class.php on line 158
Strict Standards: Declaration of opAnonymousMember::getConfig() should be compatible with that of Member::getConfig() in /home/upsilon/git/openpne3/sqlite/lib/user/opAnonymousMember.class.php on line 158
PHP Strict Standards: Declaration of opAnonymousMember::delete() should be compatible with that of Member::delete() in /home/upsilon/git/openpne3/sqlite/lib/user/opAnonymousMember.class.php on line 158
Strict Standards: Declaration of opAnonymousMember::delete() should be compatible with that of Member::delete() in /home/upsilon/git/openpne3/sqlite/lib/user/opAnonymousMember.class.php on line 158
PHP Strict Standards: Declaration of opAnonymousMember::save() should be compatible with that of opDoctrineRecord::save() in /home/upsilon/git/openpne3/sqlite/lib/user/opAnonymousMember.class.php on line 158
Strict Standards: Declaration of opAnonymousMember::save() should be compatible with that of opDoctrineRecord::save() in /home/upsilon/git/openpne3/sqlite/lib/user/opAnonymousMember.class.php on line 158
</pre></code>
opWikifyPlugin - Bug(バグ) #1890 (New(新規)): 「最新日記」ページで日記の本文要約にタグが出力されてしまう
http://redmine.openpne.jp/issues/1890
2011-01-24T12:05:28Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>日記の先頭近くにリンク構文が含まれていると、最新日記ページの日記の本文要約に「<a class="wikilink" target="_blank" href="http:// ...」とタグが出力されてしまう。<br />ただしエスケープされているため脆弱性ではない。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>OpenPNE3のコアに対して行った <a class="external" href="https://github.com/upsilon/OpenPNE3/commit/ace43b7">https://github.com/upsilon/OpenPNE3/commit/ace43b7</a> の機能追加では、イベントの受信先が $isStrip の値を知ることができないため常にタグを出力することになる。<br /><a class="issue tracker-2 status-1 priority-4 priority-default" title="Enhancement(機能追加・改善): 日記のコメントやコミュニティのトピックなどでリンク構文を使うことができない (New(新規))" href="http://redmine.openpne.jp/issues/1889">#1889</a> の修正を行うことでも解決できるが、いずれにせよpull-requestは修正する必要がある。</p>
OpenPNE 3 - Bug(バグ) #1855 (New(新規)): cache以下のディレクトリがユーザ毎に完全に分離できていない
http://redmine.openpne.jp/issues/1855
2010-12-17T07:01:26Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>symfony コマンドを使用してタスクを実行すると、キャッシュディレクトリにユーザ毎に生成されるディレクトリを無視して ./cache/config/OpenPNE.yml.php や ./cache/project_autoload.cache のようなファイルが生成されてしまいます。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>ユーザ毎の sf_cache_dir の変更は opApplicationConfiguration::setCacheDir() で行われていますが、symfony コマンドでのタスクの実行ではタスクが実行されるまでの初期化中に opApplicationConfiguration が使われていません。そのため、sf_cache_dir への変更が行われないままキャッシュが生成されてます。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>opApplicationConfiguration::setCacheDir() メソッドを opProjectConfiguration クラスに移動する</p>
opRichTextareaSyntaxHighlightP - Bug(バグ) #777 (New(新規)): 表示するコード中にURLが含まれているとaタグに置き換わってしまう
http://redmine.openpne.jp/issues/777
2010-03-03T09:48:17Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="手順"></a>
<h3 >手順<a href="#手順" class="wiki-anchor">¶</a></h3>
<ol>
<li>日記作成画面でタイトルを入れ、本文に<br /><pre><code><op:source lang="html">
http://www.example.com/
</op:source>
</code></pre>と入力する</li>
<li>「確定」をクリック</li>
<li>日記本文に<br /><pre><code><a href="http://www.example.com/" target="_blank">http://www.example.com/</a>
</code></pre>と表示されます</li>
</ol>