· 10 years ago · Apr 18, 2016, 07:18 AM
1題å: ```Zend_Validate_Hostnameクラス㧠.com, .biz, .cn ドメインã®ãƒ›ã‚¹ãƒˆåãŒã‚¨ãƒ©ãƒ¼ã«ãªã‚‹```
2
3説明:
4```
5h3. Overview (ç¾è±¡)
6
7Zend_Validate_Hostname を使用ã™ã‚‹æ©Ÿèƒ½ã§ .com, .biz, .cn ドメインã®ãƒ›ã‚¹ãƒˆåã¾ãŸã¯ URL ãŒã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã€‚
8
9具体的ã«ã¯ã€ä¸‹è¨˜ã®æ©Ÿèƒ½ã§å•題ãŒç™ºç”Ÿã™ã‚‹ã€‚
10
11 * OpenPNE.yml ã® @mail_smtp_host@
12 ** 例: @smtp.gmail.com@ を使用ã—ãŸãƒ¡ãƒ¼ãƒ«é€ä¿¡ãŒè¡Œãˆãªã„<pre><code class="yaml">
13mail_smtp_host: "smtp.gmail.com"
14mail_smtp_config:
15 auth: "login"
16 username: "*****@gmail.com"
17 password: “*****â€
18 ssl: "tls"
19 port: 587
20</code></pre>
21 ** 発生ã™ã‚‹ã‚¨ãƒ©ãƒ¼ã®ä¾‹: {{collapse(詳細を表示...)
22<pre>
23$ ./symfony openpne:send-daily-news --app=pc_frontend --trace
24
25
26 [Zend_Validate_Exception]
27 Internal error: DNS validation failed
28
29
30Exception trace:
31 at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Validate/Hostname.php:365
32 Zend_Validate_Hostname->isValid at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Validate.php:94
33 Zend_Validate->isValid at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Mail/Protocol/Abstract.php:133
34 Zend_Mail_Protocol_Abstract->__construct at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Mail/Protocol/Smtp.php:156
35 Zend_Mail_Protocol_Smtp->__construct at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Mail/Protocol/Smtp/Auth/Login.php:76
36 Zend_Mail_Protocol_Smtp_Auth_Login->__construct at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Mail/Transport/Smtp.php:196
37 Zend_Mail_Transport_Smtp->_sendMail at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Mail/Transport/Abstract.php:348
38 Zend_Mail_Transport_Abstract->send at /home/upsilon/git/openpne3/v3.6/lib/vendor/Zend/Mail.php:936
39 Zend_Mail->send at /home/upsilon/git/openpne3/v3.6/lib/util/opMailSend.class.php:218
40 opMailSend::execute at /home/upsilon/git/openpne3/v3.6/lib/util/opMailSend.class.php:156
41 opMailSend::sendTemplateMail at /home/upsilon/git/openpne3/v3.6/lib/task/openpneSendDailyNewsTask.class.php:112
42 openpneSendDailyNewsTask->sendDailyNews at /home/upsilon/git/openpne3/v3.6/lib/task/openpneSendDailyNewsTask.class.php:43
43 openpneSendDailyNewsTask->execute at /home/upsilon/git/openpne3/v3.6/lib/vendor/symfony/lib/task/sfBaseTask.class.php:68
44 sfBaseTask->doRun at /home/upsilon/git/openpne3/v3.6/lib/vendor/symfony/lib/task/sfTask.class.php:97
45 sfTask->runFromCLI at /home/upsilon/git/openpne3/v3.6/lib/vendor/symfony/lib/command/sfSymfonyCommandApplication.class.php:76
46 sfSymfonyCommandApplication->run at /home/upsilon/git/openpne3/v3.6/lib/vendor/symfony/lib/command/cli.php:20
47 include at /home/upsilon/git/openpne3/v3.6/symfony:14
48</pre>
49}}
50 * opOpenSocialPlugin ã®ã‚¢ãƒ—リ追åŠ
51 ** 例: 管ç†ç”»é¢ã®ã€Œã‚¢ãƒ—ãƒªè¿½åŠ ã€(/pc_backend_dev.php/opOpenSocialPlugin/add) ã§ @Gadget XML URL@ ã« @gist.github.com@ ãªã©ã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã® URL を指定ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚‹
52
53ã“ã®ä¸å…·åˆã¯ OpenPNE *3.4.x* ãŠã‚ˆã³ *3.6.x* ã®ã¿ã§ç™ºç”Ÿã™ã‚‹ã€‚
54
55h3. Causes (åŽŸå› )
56
57#205 ã§èµ·ããŸå•題ã®ä¿®æ£ã®ãŸã‚ã«ã€@Zend_Validate_Hostname@ ã«å¯¾ã—㦠@3.7.0@ 以é™ã¨ãれ以å‰ã§ç•°ãªã‚‹ä¿®æ£ãŒè¡Œã‚れãŸã€‚
58ã“ã®ä¿®æ£ã«ã‚ˆã‚Š OpenPNE 3.6.x ã«ã¯ commit:fbdbb216 ã®ä¿®æ£ãŒè¡Œã‚れãŸãŒã€ã€Œæœ€æ–°ã®å®‰å®šç‰ˆã§é…布ã•れã¦ã„ã‚‹ Zend/Validate/Hostname/*.php ã¨ã»ã¼è¿‘ã„æŒ™å‹•ã«ãªã‚‹ã‚ˆã†ãªã‚¯ãƒ©ã‚¹ãƒ•ァイルã€ãŒæ£ã—ãæ©Ÿèƒ½ã—ãªã‹ã£ãŸãŸã‚今回ã®ä¸å…·åˆãŒèµ·ããŸã€‚
59
60#205-6 より引用:
61> æ¬¡ã®æ–¹é‡ã§å®Ÿè£…ã—ã¾ã™ã€‚
62>
63> * OpenPNE 3.7.0 : åŒæ¢±ã™ã‚‹ ZendFramework ã®æœ€æ–°ã®å®‰å®šç‰ˆã«ã‚¢ãƒƒãƒ—デートã—ã¾ã™
64> * OpenPNE 3.6 ä»¥å‰ : ZendFramework ã®æœ€æ–°ã®å®‰å®šç‰ˆã«å˜åœ¨ã™ã‚‹ Zend/Validate/Hostname/*.php ã«å¯¾å¿œã™ã‚‹ãƒ•ァイルãŒåŒæ¢±ã—ã¦ã„ã‚‹ ZendFramework ã«å˜åœ¨ã—ã¦ã„ãªã‘れã°ã€æœ€æ–°ã®å®‰å®šç‰ˆã§é…布ã•れã¦ã„ã‚‹ Zend/Validate/Hostname/*.php ã¨ã»ã¼è¿‘ã„æŒ™å‹•ã«ãªã‚‹ã‚ˆã†ãªã‚¯ãƒ©ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’è¿½åŠ ã™ã‚‹ã¨ã„ã†æš«å®šçš„ãªå¯¾å‡¦ã‚’ãŠã“ãªã„ã¾ã™
65
66h4. *.biz, *.cn ドメインã®å ´åˆã«ç™ºç”Ÿã™ã‚‹ã‚¨ãƒ©ãƒ¼
67
68<pre>
69PHP 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
70</pre>
71
72source:lib/vendor/Zend/Validate/Hostname/Biz.php@fbdbb216 ã®ãƒ‘ターン㯠207,460 æ–‡å—〠source:lib/vendor/Zend/Validate/Hostname/Cn.php@fbdbb216 ã®ãƒ‘ターン㯠156,176 æ–‡å—ã¨éžå¸¸ã«å·¨å¤§ãªæ£è¦è¡¨ç¾ãƒ‘ターンã¨ãªã£ã¦ãŠã‚Šã€ã“ã®ã“ã¨ãŒã‚¨ãƒ©ãƒ¼ã®åŽŸå› ã§ã‚ã‚‹ã¨è€ƒãˆã‚‰ã‚Œã‚‹ã€‚
73
743.7.0 以é™ã«å¯¾ã—ã¦ä¿®æ£ã•れ㟠source:lib/vendor/Zend/Validate/Hostname/Biz.php@821abff4 ã¯è¤‡æ•°ã«åˆ†å‰²ã•ã‚ŒãŸæ£è¦è¡¨ç¾ãƒ‘ターンを使用ã—ã¦ãƒ‰ãƒ¡ã‚¤ãƒ³åã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ã„ã‚‹ãŸã‚今回ã®ã‚ˆã†ãªå•題ã¯ç™ºç”Ÿã—ã¦ã„ãªã„。
75
76h4. *.com ドメインã®å ´åˆã«ç™ºç”Ÿã™ã‚‹ã‚¨ãƒ©ãƒ¼
77
78<pre>
79PHP 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
80</pre>
81
82コードãƒã‚¤ãƒ³ãƒˆ U+D800 ã‹ã‚‰ U+DFFF ã¾ã§ã®ç¯„囲㯠Unicode ã®ã‚µãƒã‚²ãƒ¼ãƒˆãƒšã‚¢ã® high surrogates ãŠã‚ˆã³ low surrogates ã®ãŸã‚ã«ç¢ºä¿ã•れãŸé ˜åŸŸã§ã‚りã€ã“れらã®é ˜åŸŸã§ã¯ 2 ã¤ã®ç¬¦å·å˜ä½ã§ 1 æ–‡å—ã¨ã—ã¦æ‰±ã†ãŸã‚ã„ãšã‚Œã‹å˜ä½“ã§æ£è¦è¡¨ç¾ãƒ‘ターンã«ãƒžãƒƒãƒã™ã‚‹ã“ã¨ã¯ãªã„。
83例ãˆã°ã€ŒðŸ£ã€ã¨ã„ã†æ–‡å—㯠U+D83C U+DF63 ã®çµ„ã§ 1 æ–‡å—ã¨ã—ã¦æ‰±ã‚れるãŸã‚ @/\x{D800}-\x{DFFF}/u@ ã®ã‚ˆã†ãªæ£è¦è¡¨ç¾ãƒ‘ターンを用ã„ã¦ã‚‚マッãƒã™ã‚‹ã“ã¨ã¯ãªã„(サãƒã‚²ãƒ¼ãƒˆãƒšã‚¢ã¯ U+10000 以é™ã®ã‚³ãƒ¼ãƒ‰ãƒã‚¤ãƒ³ãƒˆã§è¡¨ã•れã€ã€ŒðŸ£ã€ã¯ U+1F363 ã§ã‚ã‚‹ãŸã‚ @/\x{1F363}/u@ ã§ã‚れã°ãƒžãƒƒãƒã™ã‚‹ï¼‰
84
85<pre>
86$ echo -n 'ðŸ£' | nkf -W -w16B0 | xxd
8700000000: d83c df63 .<.c
88$ php -r "var_dump(preg_match('/\x{D800}-\x{DFFF}/u', 'ðŸ£'));"
89PHP Warning: preg_match(): Compilation failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 7 in Command line code on line 1
90
91Warning: preg_match(): Compilation failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 7 in Command line code on line 1
92bool(false)
93$ php -r "var_dump(preg_match('/\x{1F363}/u', 'ðŸ£'));"
94int(1)
95</pre>
96
97source:lib/vendor/Zend/Validate/Hostname/Com.php@fbdbb216 ã®æ£è¦è¡¨ç¾ãƒ‘ターンã«ã¯ @\x{D800}-\x{DB7F}\x{DC00}-\x{DFFF}@ ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ã“ã®éƒ¨åˆ†ãŒã‚µãƒã‚²ãƒ¼ãƒˆãƒšã‚¢ã®é ˜åŸŸã«è©²å½“ã™ã‚‹ãŸã‚上記ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸã¨è€ƒãˆã‚‰ã‚Œã‚‹ã€‚
98実際ã«ã“ã®éƒ¨åˆ†ã‚’除去ã™ã‚‹ã¨ *.com ドメインã®ãƒ›ã‚¹ãƒˆåã§ã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ç¾è±¡ã¯èµ·ããªããªã£ãŸã€‚
99
100h3. Way to fix (ä¿®æ£å†…容)
101
102ä¿®æ£å†…容を記入
103```