|
From: Peter J. <pj...@wa...> - 2003-11-15 10:19:05
|
Hi Thomas, All,
> That was for easier understanding, it also happens with 'real' texts,
> try eg: 'Gro=DF-Au=DFenhand.K' instead of the above
> =3D> same problem.
That's really bad. I'll have a look at (but without a shortterm
possibility to fix something).
> Just out of curiousity, does this only happen for the
> =DF-Umlaut or also for others (=E4,=F6,=FC)?
No the =F6=E4=FC umlauts aren't effected. The source of this problem,
is effectively replacing eszet ligature with "ss" for comparison
purposes, when de_de (and some others) collation is deployed.
So the length of the key grows. I thought (and hoped) that there
was some spare place to absorb some eszets in the string, but
which would be overrun by a string completely made of eszet ligatures.
> What I do not understand is, why there is no problem when inserting
> the data with the existing index but then after dropping and creating
> the index the problem appears.
From a shallow understanding of the code in question, I would diagnose
a classical buffer overrun. And that would mean undefined behaviour,
so in effect, everything may happen.
[...]
> But this only if the problem is related only for the =DF=3D>ss expansion=
. If
> this is also related to the =E4,=F6,=FC then a collation sequence doesn'=
t make
> sense IMO. Otherwise waiting for a better implementation would be better=
.
Are you setup to recomplile fbintl.dll from sources?
This patch would disable the problematic expansions in de_de:
--- bl88591de0.h Sat Oct 11 11:25:15 2003
+++ patched\bl88591de0.h Sat Nov 15 11:14:58 2003
@@ -17,7 +17,7 @@
* Contributor(s): ______________________________________.
*/
-const int NUM_EXPAND_CHARS =3D 5;
+const int NUM_EXPAND_CHARS =3D 0;
const int NUM_COMPRESS_CHARS =3D 0;
const int LOWERCASE_LEN =3D 256;
const int UPPERCASE_LEN =3D 256;
@@ -554,11 +554,6 @@
};
static const ExpandChar ExpansionTbl[NUM_EXPAND_CHARS + 1] =3D {
- {230, 97, 101}, /* =E6 -> ae */
- {198, 65, 69}, /* =C6 -> AE */
- {223, 115, 115}, /* =DF -> ss */
- {254, 116, 104}, /* =FE -> th */
- {222, 84, 72}, /* =DE -> TH */
{0, 0, 0} /* END OF TABLE */
};
Best Regards,
Peter Jacobi
BTW: I assume, you are not allowed to comment, whether
Dr=E4ger is planning to use Firebird in production code?
|