Attached is a diff between icu-4.4.1-6 and icu-4.4.1-7 which fixes
merged RC-critical bugs 604471 and 591615.  I can't do this through
unstable because unstable already contains 4.4.2, a new upstream release
(albeit one with only bug fixes).

As you can see, all this does is add a new patch to the debian directory
(and update series and changelog).  I have built this package in a
squeeze chroot and have tested OpenOffice.org (in the squeeze chroot and
also on my sid system) with and without the patch and have verified that
it fixes the problem as reported.  (The Red Hat report contains screen
shots.)  The patch has been accepted by Red Hat and has now also been
reported upstream (http://bugs.icu-project.org/trac/ticket/8198).

With the (US) holiday weekend, I will not be around my email quite as
often as usual, so I have gone ahead and uploaded this to
testing-proposed-updates for you to either accept or reject.  I hope
that's okay -- I know it requires manual intervention either way, so I'm
trying to do what makes it easiest for the release team.

I will upload to unstable after you either accept or reject this so I
can either include or not include its changelog entry in the unstable
package's changelog.

My original message is below for reference.

--Jay

Jay Berkenbilt <q...@debian.org> wrote:

> There is a bug in ICU 4.4, for which we have a small and minimally
> invasive patch, that causes OpenOffice.org rendering of Malayalam to not
> work.  The reporter argues that the bug makes the package unusable for
> at least one set of users (those who work in Malayalam).  I've attached
> the latest bit of the email trail to this message.  As such, I have
> suggested that the bug should be considered "grave".
>
> The patch is to revert a particular change set's changes to one file:
>
> http://bugs.icu-project.org/trac/changeset/26090/icu/trunk/source/layout/IndicReordering.cpp
>
> Red Hat has apparently accepted this solution.  Their bug report is
> here:
>
> https://bugzilla.redhat.com/show_bug.cgi?id=654200
>
> I don't see an upstream report on this at this time, but the discussion
> in the Red Hat bug report seems to indicate a thorough analysis.
>
> Unfortunately, the version of ICU in squeeze is 4.4.1-6 and the version
> in sid is 4.4.2-1.  I therefore can't upload to unstable and request a
> freeze exception unless we were prepared to accept 4.4.2-1's changes in
> squeeze (which .  I would prepare a 4.4.1-7 release for
> testing-proposed-updates, or this could be handled in a point release of
> squeeze.
>
> I've copied the reporter so he can clarify/correct anything I may have
> said here.
>
> Please advise as to whether I should upload a to t-p-u.  I'll upload to
> unstable either way.
>
> --Jay
>
>
>
> From: "Mahesh T. Pai" <paiva...@gmail.com>
> Subject: Re: Bug#604471: libreoffice: Malayalam Rendering issue (probably icu
>  related)
> To: Jay Berkenbilt <q...@debian.org>
> Cc: Rene Engelhard <r...@debian.org>, 604...@bugs.debian.org,
>       prav...@gmail.com
> Date: Mon, 22 Nov 2010 22:07:11 +0530
>
> Jay Berkenbilt said on Mon, Nov 22, 2010 at 11:12:12AM -0500,:
>
>  > the patch and upload, but only the release team can make the decision as
>  > to whether the change will get into squeeze.  It's very late right now,
>  > so they will have to be convinced that it is a release-critical bug.  If
>  > you upgrade the status of the bug from important to grave and justify
>  > this, I will upload a new version with the patch that reverts the change
>  > that introduced the problem and will request that the release team allow
>  > a freeze exception.  They will either grant the freeze exception, or
>  > they will disagree with the classification of the bug.  In the former
>
> It is absolutely essential that this patch squeezes past the Squeeze freeze.
>
> OO.o / LibO is one of the critical components for the desktop, and the 
> rendering
> issues caused by the bug renders OO.o / LibO practically useless for people 
> using
> Malayalam. This has been working well in previous versions of Debian / OO.o / 
> LibO,
> and it will be extremely disappointing for users to find the problem arising 
> now.
>
> While personally, I can wait till the next version of ICU enters testing, 
> that is 
> because I use Sid, and know reasonably well my way around Debian. 
>
> I would rather that the Squeeze freeze is freeezed till this is fixed.
diff -urN ../icu-4.4.1-6/debian/changelog ./debian/changelog
--- ../icu-4.4.1-6/debian/changelog	2010-07-28 18:44:01.000000000 -0400
+++ ./debian/changelog	2010-11-25 12:07:26.000000000 -0500
@@ -1,3 +1,9 @@
+icu (4.4.1-7) testing-proposed-updates; urgency=high
+
+  * Apply patch to fix Malayam rendering.  (Closes: #591615)
+
+ -- Jay Berkenbilt <q...@debian.org>  Thu, 25 Nov 2010 12:07:26 -0500
+
 icu (4.4.1-6) unstable; urgency=low
 
   * Include patch from Alexander Kurtz to solve failure to build from
diff -urN ../icu-4.4.1-6/debian/patches/malayalam-rendering.patch ./debian/patches/malayalam-rendering.patch
--- ../icu-4.4.1-6/debian/patches/malayalam-rendering.patch	1969-12-31 19:00:00.000000000 -0500
+++ ./debian/patches/malayalam-rendering.patch	2010-11-25 12:06:05.000000000 -0500
@@ -0,0 +1,164 @@
+Description: revert change that broke Malayam rendering
+Origin: reverse patch from http://bugs.icu-project.org/trac/changeset/26090/icu/trunk/source/layout/IndicReordering.cpp
+Bug: http://bugs.icu-project.org/trac/ticket/8198
+Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=654200
+Bug-Debian: http://bugs.debian.org/591615
+
+--- icu-4.4.1.orig/source/layout/IndicReordering.cpp	2010-04-28 11:28:52.000000000 -0400
++++ icu-4.4.1/source/layout/IndicReordering.cpp	2010-11-25 12:05:29.241234306 -0500
+@@ -129,10 +129,6 @@
+     le_int32    fSMIndex;
+     FeatureMask fSMFeatures;
+ 
+-    LEUnicode   fPreBaseConsonant;
+-    LEUnicode   fPreBaseVirama;
+-    le_int32    fPBCIndex;
+-    FeatureMask fPBCFeatures;
+ 
+     void saveMatra(LEUnicode matra, le_int32 matraIndex, IndicClassTable::CharClass matraClass)
+     {
+@@ -179,8 +175,7 @@
+           fMpost(0), fMpostIndex(0), fLengthMark(0), fLengthMarkIndex(0), fAlLakuna(0), fAlLakunaIndex(0),
+           fMatraFeatures(0), fMPreOutIndex(-1), fMPreFixups(mpreFixups),
+           fVMabove(0), fVMpost(0), fVMIndex(0), fVMFeatures(0),
+-          fSMabove(0), fSMbelow(0), fSMIndex(0), fSMFeatures(0),
+-          fPreBaseConsonant(0), fPreBaseVirama(0), fPBCIndex(0), fPBCFeatures(0)
++          fSMabove(0), fSMbelow(0), fSMIndex(0), fSMFeatures(0)
+     {
+         // nothing else to do...
+     }
+@@ -199,8 +194,6 @@
+         
+         fVMabove = fVMpost  = 0;
+         fSMabove = fSMbelow = 0;
+-
+-        fPreBaseConsonant = fPreBaseVirama = 0;
+     }
+ 
+     void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures)
+@@ -396,14 +389,6 @@
+         }
+     }
+ 
+-    void notePreBaseConsonant(le_uint32 index,LEUnicode PBConsonant, LEUnicode PBVirama, FeatureMask features)
+-    {
+-        fPBCIndex = index;
+-        fPreBaseConsonant = PBConsonant;
+-        fPreBaseVirama = PBVirama;
+-        fPBCFeatures = features;
+-    }
+-
+     void noteBaseConsonant()
+     {
+         if (fMPreFixups != NULL && fMPreOutIndex >= 0) {
+@@ -483,22 +468,6 @@
+         }
+     }
+     
+-    void writePreBaseConsonant()
+-    {
+-        // The TDIL spec says that consonant + virama + RRA should produce a rakar in Malayalam.  However,
+-        // it seems that almost none of the fonts for Malayalam are set up to handle this.
+-        // So, we're going to force the issue here by using the rakar as defined with RA in most fonts.
+-
+-        if (fPreBaseConsonant == 0x0d31) { // RRA
+-            fPreBaseConsonant = 0x0d30; // RA
+-        }
+-        
+-        if (fPreBaseConsonant != 0) {
+-            writeChar(fPreBaseConsonant, fPBCIndex, fPBCFeatures);
+-            writeChar(fPreBaseVirama,fPBCIndex-1,fPBCFeatures);
+-        }
+-    }
+-
+     le_int32 getOutputIndex()
+     {
+         return fOutIndex;
+@@ -765,7 +734,6 @@
+                 lastConsonant -= 1;
+             }
+ 
+-            
+             IndicClassTable::CharClass charClass = CC_RESERVED;
+             IndicClassTable::CharClass nextClass = CC_RESERVED;
+             le_int32 baseConsonant = lastConsonant;
+@@ -773,11 +741,9 @@
+             le_int32 postBaseLimit = classTable->scriptFlags & SF_POST_BASE_LIMIT_MASK;
+             le_bool  seenVattu = FALSE;
+             le_bool  seenBelowBaseForm = FALSE;
+-            le_bool  seenPreBaseForm = FALSE;
+             le_bool  hasNukta = FALSE;
+             le_bool  hasBelowBaseForm = FALSE;
+             le_bool  hasPostBaseForm = FALSE;
+-            le_bool  hasPreBaseForm = FALSE;
+ 
+             if (postBase < markStart && classTable->isNukta(chars[postBase])) {
+                 charClass = CC_NUKTA;
+@@ -791,22 +757,14 @@
+ 
+                 hasBelowBaseForm = IndicClassTable::hasBelowBaseForm(charClass) && !hasNukta;
+                 hasPostBaseForm  = IndicClassTable::hasPostBaseForm(charClass)  && !hasNukta;
+-                hasPreBaseForm = IndicClassTable::hasPreBaseForm(charClass) && !hasNukta;
+ 
+                 if (IndicClassTable::isConsonant(charClass)) {
+                     if (postBaseLimit == 0 || seenVattu ||
+                         (baseConsonant > baseLimit && !classTable->isVirama(chars[baseConsonant - 1])) ||
+-                        !(hasBelowBaseForm || hasPostBaseForm || hasPreBaseForm)) {
++                        !(hasBelowBaseForm || hasPostBaseForm)) {
+                         break;
+                     }
+ 
+-                    // Note any pre-base consonants
+-                    if ( baseConsonant == lastConsonant && lastConsonant > 0 && 
+-                         hasPreBaseForm && classTable->isVirama(chars[baseConsonant - 1])) {
+-                        output.notePreBaseConsonant(lastConsonant,chars[lastConsonant],chars[lastConsonant-1],tagArray2);
+-                        seenPreBaseForm = TRUE;
+-   
+-                    }
+                     // consonants with nuktas are never vattus
+                     seenVattu = IndicClassTable::isVattu(charClass) && !hasNukta;
+ 
+@@ -839,14 +797,12 @@
+             }
+ 
+             // write any pre-base consonants
+-            output.writePreBaseConsonant();
+-
+             le_bool supressVattu = TRUE;
+ 
+             for (i = baseLimit; i < baseConsonant; i += 1) {
+                 LEUnicode ch = chars[i];
+-                // Don't put 'pstf' or 'blwf' on anything before the base consonant.
+-                FeatureMask features = tagArray1 & ~( pstfFeatureMask | blwfFeatureMask );
++                // Don't put 'blwf' on first consonant.
++                FeatureMask features = (i == baseLimit? tagArray2 : tagArray1);
+ 
+                 charClass = classTable->getCharClass(ch);
+                 nextClass = classTable->getCharClass(chars[i + 1]);
+@@ -897,7 +853,7 @@
+             }
+ 
+             // write below-base consonants
+-            if (baseConsonant != lastConsonant && !seenPreBaseForm) {
++            if (baseConsonant != lastConsonant) {
+                 for (i = bcSpan + 1; i < postBase; i += 1) {
+                     output.writeChar(chars[i], i, tagArray1);
+                 }
+@@ -927,7 +883,7 @@
+ 
+             // write post-base consonants
+             // FIXME: does this put the right tags on post-base consonants?
+-            if (baseConsonant != lastConsonant && !seenPreBaseForm) {
++            if (baseConsonant != lastConsonant) {
+                 if (postBase <= lastConsonant) {
+                     for (i = postBase; i <= lastConsonant; i += 1) {
+                         output.writeChar(chars[i], i, tagArray3);
+@@ -1195,7 +1151,7 @@
+ }
+ 
+ 
+-void IndicReordering::getDynamicProperties( DynamicProperties *, const IndicClassTable *classTable ) {
++void IndicReordering::getDynamicProperties( DynamicProperties */*dProps*/, const IndicClassTable *classTable ) {
+ 
+ 
+     LEUnicode currentChar;
diff -urN ../icu-4.4.1-6/debian/patches/series ./debian/patches/series
--- ../icu-4.4.1-6/debian/patches/series	2010-07-28 18:57:14.000000000 -0400
+++ ./debian/patches/series	2010-11-25 12:05:25.000000000 -0500
@@ -4,3 +4,4 @@
 pkgdata-buffers.patch
 arm-assembler.patch
 doc-gif.patch
+malayalam-rendering.patch

Reply via email to