Attempt to fix bug #23428

git-svn-id: trunk@39437 -
This commit is contained in:
sekelsenmat 2012-12-04 13:12:15 +00:00
parent e884127108
commit bdff370210

View File

@ -1944,6 +1944,22 @@ var
NewChar, OldChar: Word; NewChar, OldChar: Word;
// Language identification // Language identification
IsTurkish: Boolean; IsTurkish: Boolean;
procedure CorrectOutStrSize(AOldCharSize, ANewCharSize: Integer);
begin
if not (ANewCharSize > AOldCharSize) then Exit; // no correction needed
if (ANewCharSize > 20) or (AOldCharSize > 20) then Exit; // sanity check
// Fix for bug 23428
// If the string wasn't decreased by previous char changes,
// and our current operation will make it bigger, then for safety
// increase the buffer
if (ANewCharSize > AOldCharSize) and (OutCounter >= InCounter-1) then
begin
SetLength(Result, Length(Result)+ANewCharSize-AOldCharSize);
OutStr := PChar(Result);
end;
end;
begin begin
// Start with the same string, and progressively modify // Start with the same string, and progressively modify
Result:=AInStr; Result:=AInStr;
@ -2066,6 +2082,7 @@ begin
$C8BC: NewChar := $C8BB; $C8BC: NewChar := $C8BB;
$C8BF: $C8BF:
begin begin
CorrectOutStrSize(2, 3);
OutStr[OutCounter] := #$E2; OutStr[OutCounter] := #$E2;
OutStr[OutCounter+1]:= #$B1; OutStr[OutCounter+1]:= #$B1;
OutStr[OutCounter+2]:= #$BE; OutStr[OutCounter+2]:= #$BE;
@ -2075,6 +2092,7 @@ begin
// 0240 = C9 80 // 0240 = C9 80
$C980: $C980:
begin begin
CorrectOutStrSize(2, 3);
OutStr[OutCounter] := #$E2; OutStr[OutCounter] := #$E2;
OutStr[OutCounter+1]:= #$B1; OutStr[OutCounter+1]:= #$B1;
OutStr[OutCounter+2]:= #$BF; OutStr[OutCounter+2]:= #$BF;
@ -2086,6 +2104,7 @@ begin
// 0250 = C9 90 // 0250 = C9 90
$C990: $C990:
begin begin
CorrectOutStrSize(2, 3);
OutStr[OutCounter] := #$E2; OutStr[OutCounter] := #$E2;
OutStr[OutCounter+1]:= #$B1; OutStr[OutCounter+1]:= #$B1;
OutStr[OutCounter+2]:= #$AF; OutStr[OutCounter+2]:= #$AF;
@ -2094,6 +2113,7 @@ begin
end; end;
$C991: $C991:
begin begin
CorrectOutStrSize(2, 3);
OutStr[OutCounter] := #$E2; OutStr[OutCounter] := #$E2;
OutStr[OutCounter+1]:= #$B1; OutStr[OutCounter+1]:= #$B1;
OutStr[OutCounter+2]:= #$AD; OutStr[OutCounter+2]:= #$AD;
@ -2102,6 +2122,7 @@ begin
end; end;
$C992: $C992:
begin begin
CorrectOutStrSize(2, 3);
OutStr[OutCounter] := #$E2; OutStr[OutCounter] := #$E2;
OutStr[OutCounter+1]:= #$B1; OutStr[OutCounter+1]:= #$B1;
OutStr[OutCounter+2]:= #$B0; OutStr[OutCounter+2]:= #$B0;
@ -2119,6 +2140,7 @@ begin
$C9A3: NewChar := $C694; $C9A3: NewChar := $C694;
$C9A5: $C9A5:
begin begin
CorrectOutStrSize(2, 3);
OutStr[OutCounter] := #$EA; OutStr[OutCounter] := #$EA;
OutStr[OutCounter+1]:= #$9E; OutStr[OutCounter+1]:= #$9E;
OutStr[OutCounter+2]:= #$8D; OutStr[OutCounter+2]:= #$8D;
@ -2129,6 +2151,7 @@ begin
$C9A9: NewChar := $C696; $C9A9: NewChar := $C696;
$C9AB: $C9AB:
begin begin
CorrectOutStrSize(2, 3);
OutStr[OutCounter] := #$E2; OutStr[OutCounter] := #$E2;
OutStr[OutCounter+1]:= #$B1; OutStr[OutCounter+1]:= #$B1;
OutStr[OutCounter+2]:= #$A2; OutStr[OutCounter+2]:= #$A2;
@ -2139,6 +2162,7 @@ begin
// 0270 = C9 B0 // 0270 = C9 B0
$C9B1: $C9B1:
begin begin
CorrectOutStrSize(2, 3);
OutStr[OutCounter] := #$E2; OutStr[OutCounter] := #$E2;
OutStr[OutCounter+1]:= #$B1; OutStr[OutCounter+1]:= #$B1;
OutStr[OutCounter+2]:= #$AE; OutStr[OutCounter+2]:= #$AE;
@ -2149,6 +2173,7 @@ begin
$C9B5: NewChar := $C69F; $C9B5: NewChar := $C69F;
$C9BD: $C9BD:
begin begin
CorrectOutStrSize(2, 3);
OutStr[OutCounter] := #$E2; OutStr[OutCounter] := #$E2;
OutStr[OutCounter+1]:= #$B1; OutStr[OutCounter+1]:= #$B1;
OutStr[OutCounter+2]:= #$A4; OutStr[OutCounter+2]:= #$A4;