Browse Source

TEncoding: fix base convert functions for empty inputs

git-svn-id: trunk@46430 -
ondrej 5 years ago
parent
commit
38c7659d07
1 changed files with 33 additions and 10 deletions
  1. 33 10
      rtl/objpas/sysutils/sysencoding.inc

+ 33 - 10
rtl/objpas/sysutils/sysencoding.inc

@@ -38,7 +38,10 @@ end;
 
 function TEncoding.GetAnsiBytes(const S: string): TBytes;
 begin
-  Result := GetAnsiBytes(S, 1, Length(S));
+  if S='' then
+    Result := nil
+  else
+    Result := GetAnsiBytes(S, 1, Length(S));
 end;
 
 function TEncoding.GetAnsiBytes(const S: string; CharIndex, CharCount: Integer
@@ -49,7 +52,10 @@ end;
 
 function TEncoding.GetAnsiString(const Bytes: TBytes): string;
 begin
-  Result := GetAnsiString(Bytes, 0, Length(Bytes));
+  if Length(Bytes)=0 then
+    Result := ''
+  else
+    Result := GetAnsiString(Bytes, 0, Length(Bytes));
 end;
 
 function TEncoding.GetAnsiString(const Bytes: TBytes; ByteIndex,
@@ -294,7 +300,10 @@ end;
 
 function TEncoding.GetByteCount(const Chars: TUnicodeCharArray): Integer;
 begin
-  Result := GetByteCount(Chars, 0, Length(Chars));
+  if Length(Chars)=0 then
+    Result := 0
+  else
+    Result := GetByteCount(Chars, 0, Length(Chars));
 end;
 
 function TEncoding.GetByteCount(const Chars: TUnicodeCharArray; CharIndex,
@@ -309,7 +318,10 @@ end;
 
 function TEncoding.GetByteCount(const S: UnicodeString): Integer;
 begin
-  Result := GetByteCount(PUnicodeChar(S), Length(S));
+  if S='' then
+    Result := 0
+  else
+    Result := GetByteCount(PUnicodeChar(S), Length(S));
 end;
 
 function TEncoding.GetByteCount(const S: UnicodeString; CharIndex, CharCount: Integer): Integer;
@@ -324,7 +336,8 @@ end;
 function TEncoding.GetBytes(const Chars: TUnicodeCharArray): TBytes;
 begin
   SetLength(Result, GetByteCount(Chars));
-  GetBytes(@Chars[0], Length(Chars), @Result[0], Length(Result));
+  if Length(Result)>0 then
+    GetBytes(@Chars[0], Length(Chars), @Result[0], Length(Result));
 end;
 
 function TEncoding.GetBytes(const Chars: TUnicodeCharArray; CharIndex,
@@ -358,7 +371,8 @@ end;
 function TEncoding.GetBytes(const S: UnicodeString): TBytes;
 begin
   SetLength(Result, GetByteCount(S));
-  GetBytes(@S[1], Length(S), @Result[0], Length(Result));
+  if Length(Result)>0 then
+    GetBytes(@S[1], Length(S), @Result[0], Length(Result));
 end;
 
 function TEncoding.GetBytes(const S: UnicodeString; CharIndex, CharCount: Integer;
@@ -380,7 +394,10 @@ end;
 
 function TEncoding.GetCharCount(const Bytes: TBytes): Integer;
 begin
-  Result := GetCharCount(@Bytes[0], Length(Bytes));
+  if Length(Bytes)=0 then
+    Result := 0
+  else
+    Result := GetCharCount(@Bytes[0], Length(Bytes));
 end;
 
 function TEncoding.GetCharCount(const Bytes: TBytes; ByteIndex,
@@ -394,7 +411,8 @@ end;
 function TEncoding.GetChars(const Bytes: TBytes): TUnicodeCharArray;
 begin
   SetLength(Result, GetCharCount(Bytes));
-  GetChars(@Bytes[0], Length(Bytes), @Result[0], Length(Result));
+  if Length(Result)>0 then
+    GetChars(@Bytes[0], Length(Bytes), @Result[0], Length(Result));
 end;
 
 function TEncoding.GetChars(const Bytes: TBytes; ByteIndex, ByteCount: Integer): TUnicodeCharArray;
@@ -444,8 +462,13 @@ function TEncoding.GetString(const Bytes: TBytes): UnicodeString;
 var
   Chars: TUnicodeCharArray;
 begin
-  Chars := GetChars(Bytes);
-  SetString(Result, PUnicodeChar(Chars), Length(Chars));
+  if Length(Bytes)=0 then
+    Result := ''
+  else
+  begin
+    Chars := GetChars(Bytes);
+    SetString(Result, PUnicodeChar(Chars), Length(Chars));
+  end;
 end;
 
 function TEncoding.GetString(const Bytes: TBytes; ByteIndex, ByteCount: Integer): UnicodeString;