PHP4.4.0のmb_encode_mimeheaderのバグでSquirrelmailのsubjectが特定文字で文字化けする

SRPMをダウンロード→パッチあて→リビルド しよう

PHP4.4のSRPM

SRPMを展開→リビルドの方法


# yum install bzip2-devel curl-devel db4-devel expat-devel freetype-devel gd-devel gdbm-devel gmp-devel libjpeg-devel libpng-devel libxml2-devel ncurses-devel openssl-devel pam-devel pspell-devel apache-devel imap-devel krb5-devel cyrus-sasl-devel openldap-devel mysql-devel postgresql-devel unixODBC-devel ucd-snmp-devel krb5-libs zlib-devel mm-devel flex

これだけパッケージがいるようだ、ていうかflex今まで入ってなかったのか(w
まぁ要領削減の為にdevel系パッケージは全て削除してたので仕方ない・・・

# rpm -ivh php-4.4.0-1.norlug.src.rpm
とすると
/usr/src/redhat/SPECS/にphp.spec
/usr/src/redhat/SPECS/にphp.spec
/usr/src/redhat/SOURCES/にソースファイルのアーカイブやパッチファイルが置かれる

php-4.4.0-mbfilter.patch

--- php-4.4.0/ext/mbstring/libmbfl/mbfl/mbfilter.c.org  2005-04-22 14:03:16.000000000 +0900
+++ php-4.4.0/ext/mbstring/libmbfl/mbfl/mbfilter.c      2005-07-16 13:57:54.789858536 +0900
@@ -1964,9 +1964,9 @@
 {
        static int qp_table[256] = {
                1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x00 */
-               1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x00 */
+               1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x10 */
                1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
-               0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 1, 0, 1, /* 0x10 */
+               0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 1, 0, 1, /* 0x30 */
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x50 */
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */
@@ -1990,7 +1990,7 @@
                break;

        default:        /* ASCII */
-               if (!qp_table[(c & 0xff)]) { /* ordinary characters */
+               if (c >= 0x00 && c < 0x100 && !qp_table[(c & 0xff)]) { /* ordinary characters */
                        mbfl_memory_device_output(c, &pe->tmpdev);
                        pe->status1 = 1;
                } else if (pe->status1 == 0 && c == 0x20) {     /* repeat SPACE */

上記内容のパッチファイルphp-4.4.0-mbfilter.patchを/usr/src/redhat/SOURCES/へ設置

/usr/src/redhat/SPECS/php.specの
72行目周辺

Patch7: php-libtool.patch
# mbsfilter patch
Patch8: php-4.4.0-mbfilter.patch

を追加
295行目周辺

#%patch7 -p1
%patch8 -p1

を追加


# rpmbuild -bb php.spec
を実行するとバイナリパッケージが/usr/src/redhat/RPMS/i386/に作られる

# rpm -ivh --replacepkgs --replacefiles php-4.4.0-1.norlug.i386.rpm
等ですでに入っているパッケージとリプレース可能


終わったらいらないファイルとパッケージを削除
# rm -rf /usr/src/redhat/BUILD/php*
# rm -rf /usr/src/redhat/SOURCES/php*
# rm -rf /usr/src/redhat/SPECS/php*
# yum remove bzip2-devel curl-devel db4-devel expat-devel freetype-devel gd-devel gdbm-devel gmp-devel libjpeg-devel libpng-devel libxml2-devel ncurses-devel openssl-devel pam-devel pspell-devel apache-devel imap-devel krb5-devel cyrus-sasl-devel openldap-devel mysql-devel postgresql-devel unixODBC-devel ucd-snmp-devel zlib-devel mm-devel flex