Package: libfrontier-rpc-perl Severity: important Version: 0.07b4-3
libfrontier-rpc-perl is not very compliant with unicode and utf8 .
I wrote in php a little client to interract with a daemon in perl .
I propose this patch , for encoding all unicode character in
numerical entities , it is for me the simple way to solve the problem .
In attachement :
- a little daemon in perl using libfrontier-rpc-perl
- a little client in php for testing
- a dump each http reponse made with tcpflow ( tcpflow -ilo src port 9000 )
- a simple patch for /usr/share/perl5/Frontier/RPC2.pm
--
____________________________________________________________
/ Erwan MAS /\
| mailto:[EMAIL PROTECTED] |_/
___|________________________________________________________ |
\___________________________________________________________\__/
--- /usr/share/perl5/Frontier/RPC2.pm.orig 2002-08-03 02:48:06.000000000
+0200
+++ /usr/share/perl5/Frontier/RPC2.pm 2006-10-15 16:19:39.418894676 +0200
@@ -234,6 +234,7 @@
return ("<value><double>$value</double></value>");
} else {
$value =~ s/([&<>\"])/$char_entities{$1}/ge;
+ $value =~ s/([\x{80}-\x{FFFF}])/'&#' . ord($1) . ';'/gse;
return ("<value><string>$value</string></value>");
}
}
#!/usr/bin/perl
#----------------------------------------------------------------------------------------------
use strict ;
#----------------------------------------------------------------------------------------------
use Frontier::Daemon ;
#----------------------------------------------------------------------------------------------
new Frontier::Daemon
LocalPort => 9000 ,
LocalAddr => '127.0.0.1' ,
encoding => 'UTF-8' ,
methods => {
'badstr' => \&ReturnBadString
};
#----------------------------------------------------------------------------------------------
sub ReturnBadString {
my $n=shift ;
my $m=shift ;
#------------
return sprintf("The 'copyright symbol' by %d is '%s' \nThe 'euro symbol' by %d is '%s'\n",
$n,chr(169)x$n,$m,chr(0x20ac)x$m) ;
#------------
}
#----------------------------------------------------------------------------------------------
HTTP/1.1 200 OK Date: Sun, 15 Oct 2006 14:27:24 GMT Server: libwww-perl-daemon/1.36 Content-Length: 188 Content-Type: text/xml <?xml version="1.0"?> <methodResponse> <params> <param><value><string>The 'copyright symbol' by 0 is '' The 'euro symbol' by 0 is '' </string></value></param> </params> </methodResponse>
HTTP/1.1 200 OK Date: Sun, 15 Oct 2006 14:27:24 GMT Server: libwww-perl-daemon/1.36 Content-Length: 209 Content-Type: text/xml <?xml version="1.0"?> <methodResponse> <params> <param><value><string>The 'copyright symbol' by 20 is '????????????????????' The 'euro symbol' by 0 is '' </string></value></param> </params> </methodResponse>
HTTP/1.1 200 OK Date: Sun, 15 Oct 2006 14:27:24 GMT Server: libwww-perl-daemon/1.36 Content-Length: 209 Content-Type: text/xml <?xml version="1.0"?> <methodResponse> <params> <param><value><string>The 'copyright symbol' by 0 is '' The 'euro symbol' by 20 is '????????????????????????????????????????????????????????????' </string></value></param> </params> </methodResponse>
HTTP/1.1 200 OK Date: Sun, 15 Oct 2006 14:27:24 GMT Server: libwww-perl-daemon/1.36 Content-Length: 230 Content-Type: text/xml <?xml version="1.0"?> <methodResponse> <params> <param><value><string>The 'copyright symbol' by 20 is '????????????????????????????????????????' The 'euro symbol' by 20 is '????????????????????????????????????????????????????????????' </string></value></param> </params> </methodResponse>
php-client.php
Description: application/httpd-php

