{"id":30,"date":"2011-06-23T11:58:25","date_gmt":"2011-06-23T09:58:25","guid":{"rendered":"http:\/\/hasselba.ch\/blog\/?p=30"},"modified":"2012-02-02T13:12:39","modified_gmt":"2012-02-02T11:12:39","slug":"bug-unescape-fehlerhaft-implementiert-domino-8-5-2","status":"publish","type":"post","link":"https:\/\/hasselba.ch\/blog\/?p=30","title":{"rendered":"Bug: &#8222;Unescape&#8220; fehlerhaft implementiert (Domino 8.5.2)"},"content":{"rendered":"<p>Die Javascript-Funktion <a title=\"SELFHTML: Unabh\u00e4ngige Javascript-Funktionen\" href=\"http:\/\/de.selfhtml.org\/javascript\/objekte\/unabhaengig.htm#unescape\" target=\"_blank\">unescape<\/a> ist Serverseitig fehlerhaft implementiert. Nach einem Sonderzeichen wird bei der Konvertierung das darauf folgende einfach ignoriert, wie durch folgendes Beispiel nachvollzogen werden kann.<\/p>\n<pre>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;xp:view xmlns:xp=\"http:\/\/www.ibm.com\/xsp\/core\"&gt;\r\n&lt;xp:this.beforePageLoad&gt;&lt;![CDATA[#{javascript:\r\nprint ( <strong>unescape(\"<span style=\"color: #ff0000;\">%20<\/span>ABC<span style=\"color: #ff0000;\">%20<\/span>DEF\")<\/strong> );}]]&gt;&lt;\/xp:this.beforePageLoad&gt;\r\n&lt;\/xp:view&gt;<em> <\/em><\/pre>\n<p><em>[Fett hervorgehoben: der Funktionsaufruf \/ In Rot: Encodierte Leerzeichen]<\/em><\/p>\n<p>Eigentlich m\u00fcsste beim Aufruf derXPage auf der Serverkonsole der String &#8220; ABC DEF&#8220; ausgegeben werden, doch verschluckt sich die Funktion und schneidet das A als auch das D einfach ab (die Leerzeichen werden allerdings korrekt umgesetzt):<\/p>\n<p><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWEAAAA8CAIAAAA4+pwdAAAF+ElEQVR4nO2dTXbjOAyEdZBZzi1zOV1olvmzLacX7qeRSaAIEKToSPU9LdwUWShCdMXppF9PPz8\/9\/v97e1tIoSQnG1GzM+sc8RBQA8di\/5616hTrB7UAT6b9MGr42Irm7\/OLXnHjQbWJdiPaNtLhUmLoH0czCluE\/ffXlrQWTNC0wL1XHuL6Nj3rPXOXreVDjBmt4EXunS8gP5Pz48VjwOpiIfk9bZ6sCetugrMNDk\/uYjYooozkz5uMSPyvlcXaKhj0Tc2rljXq5MvsfQBVAd37XuJYNkvXmWUqvAg9lZ8cLifxaLViGYs8zUb6x9BM8VbibLFUjJfyAiwPVeBoA4wDfSxsr2uVwc4SXxalLUJYh86gWtp1YuP22VbW5i\/TkgUXI0CD1cb1+zVSYk2cKH8j8l8YAl3YNYyAmwPqyfmIjrafKwPxF114zqaz\/kZl598p14dO3NGfldbhaW8HoyvZ+W8eRH7HH8NSmAbs3R+gNWkz7OEpfT\/k5OMEK0Yd5UXiOho8+v043W9OprPrULEVUQnUgtXFMdd9ix7BN7irQCC9tcJuAS2MUvnRxRP5oiDrtJ\/yTMCt6BIKx1tPtDHS+x1K3S0B6Y9Kk0QP8VWjbVg8YlXFSe76hr3jp+C10CdB00KjIs+15GKvYO1xW6kc4I\/18ir9tAx9gUoa3c1vDpj+2Dflx2LT7yqONlbd96giWtLjNWxIPBj74Y4LoqsI5oHi1XcH5F0TvH3I+YM496COmC+Sx\/X1RoU19F8JuNFETDfq+Mi33udnwqTYIlWFEywM2cU\/YCiySrQT+wHrBVNgrWW0sJm7\/c7f8+SEC\/e93xFRrwKzAhC6ih+vgjOfxWYEYQQxJ4Z8Vtz9Nfy3z\/\/8jrt1ewYLcuy8+cIZsRuDD+mvAZezY7RsizLsjAjDsnwY8pr4NXsGG0zQvxeIPkhSn5LG5zgz4S0ESZIQ4YfU14Dr2bH6Ha7PTICvFHFW5b54t8+MCN2Y\/gx5TXwanaMrtdrJCMqPkowI3aj16EhL8mLZoSoid\/nzIjdYEacio4ZcbvdOn2vISLeFT+PTMp3K8QIM+JU9Hrcl8vlkRGT7ffw8yywDIo62gRxSWyXJ4UZcSr2yAiNfd6lzILmMCNORa\/H\/f39jTMCfNlvQm\/9M8OMOBUdM+J6vfLfaxwSZsSp6PW4v76+1oxw\/b0DoIeORX+9a9QpVg\/qAJ\/xPswSycLIodkK5q\/zot5x766xH9F2E7B\/+75yne2+6lqU0CsjPj8\/Hxmh9Ro8D5EeOvYzoT1Fe91WOsCY6xzU9eFBp4yYnh8rHse2qz0kr7fV7frNbdh1pufW1fUnYdeMyPu+HceC\/XQs+rlyXV2vTr7E0gdQHdwVPYiremQEKKeNex9BcaHYW\/HB4X5GbFj6D3TAeLXb7t9rJJsvPmyNVjrafKyPle11vTrASeLToqxN8N5iRuB+RmxUyCY6xXEv+32O0FpgbEorHW0+1gfirrpxHc3n\/IzLj9dSPCM0q1pFcbxuy5Py5tRei+ehCaL\/ikJaH6r7k7BTRmw7nm\/DIthKR5tfpx+v69XRfG4VmrgCIi\/4OaK6ruW1t1bEUkWhRKc47qVXRnx8fCQZ8RivPsqtdLT5QB8vsdet0ElcAZ+4IbkONoC3xozA\/YxYwnWLOpZxLx0z4nK58P\/XSPDq7N8Hy46OlBHTpjmWPidLjNVdlnCLsM60+cgQd\/ige0ZM8Psu8fFMyjNoogPmu\/Rx3ZxWOprPSTnrRh3xlrawU0ZofppsFi\/RioIJQfBzt+8u15k3XzOa2N4jI8jB4O9Znopej\/v9\/Z0ZcVSYEaeCGUHcMCNOBTOCuGFGnApmBHGTHBpep7qaHSNmxIEZfkx5DbyaHSNmxIEZfkx5DbyaHSNmxIEZfkx5DbyaHSNmxIEZfkx5DbyaHSNmBCEEwYwghCCYEYQQBDOCEIJgRhBCEMwIQgiCGUEIQTAjCCEIZgQhBMGMIIQgmBGEEAQzghCCYEYQQhDMCEIIghlBCEEwIwghCP4fPIQQwB93phPjt5fxvAAAAABJRU5ErkJggg==\" alt=\"\" \/><\/p>\n<p>Dies betrifft die Version 8.5.2FP17, unter 8.5.1 tritt der Bug nicht auf. Welche Versionen sonst noch betroffen sind, ist mir nicht bekannt.<\/p>\n<p>Als Workaround kann die Java-Funktion <a title=\"Oracle.com: Java Referenz 'java.net.URLDecoder'\" href=\"http:\/\/download.oracle.com\/javase\/1,5.0\/docs\/api\/java\/net\/URLDecoder.html\" target=\"_blank\">java.net.URLDecoder.decode<\/a> verwendet werden:<\/p>\n<pre>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;xp:view xmlns:xp=\"http:\/\/www.ibm.com\/xsp\/core\"&gt;\r\n&lt;xp:this.beforePageLoad&gt;&lt;![CDATA[#{javascript:\r\nprint ( <strong>java.net.URLDecoder.decode (\"%20ABC%20DEF\", \"utf-8\")<\/strong> );}]]&gt;\r\n&lt;\/xp:this.beforePageLoad&gt;\r\n&lt;\/xp:view&gt;<\/pre>\n<p><em>[Fett hervorgehoben: Aufruf via Java. Wichtig ist die Angabe des Schemas, hier UTF-8 (zweiter Parameter)]<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Javascript-Funktion unescape ist Serverseitig fehlerhaft implementiert. Nach einem Sonderzeichen wird bei der Konvertierung das darauf folgende einfach ignoriert, wie durch folgendes Beispiel nachvollzogen werden kann. &lt;?xml version=&#8220;1.0&#8243; encoding=&#8220;UTF-8&#8243;?&gt; &lt;xp:view xmlns:xp=&#8220;http:\/\/www.ibm.com\/xsp\/core&#8220;&gt; &lt;xp:this.beforePageLoad&gt;&lt;![CDATA[#{javascript: print ( unescape(&#8222;%20ABC%20DEF&#8220;) );}]]&gt;&lt;\/xp:this.beforePageLoad&gt; &lt;\/xp:view&gt; [Fett hervorgehoben: der &hellip; <a href=\"https:\/\/hasselba.ch\/blog\/?p=30\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,76,74],"tags":[15,7,11,16,5,12,3],"class_list":["post-30","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-ssjs","category-xpages","tag-bug","tag-domino","tag-http","tag-server","tag-ssjs","tag-web","tag-xpages"],"_links":{"self":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/30","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=30"}],"version-history":[{"count":10,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/30\/revisions"}],"predecessor-version":[{"id":42,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/30\/revisions\/42"}],"wp:attachment":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=30"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=30"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=30"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}