Skip to content

Commit e37caaf

Browse files
committed
Fix: PyUnicode_AsWideString would return wrong length when used with Unicode strings containing characters outside BMP.
1 parent 9c2bd51 commit e37caaf

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

PythonForDelphi/Components/Sources/Core/PythonEngine.pas

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1901,6 +1901,7 @@ TPythonInterface=class(TDynamicDll)
19011901
PyUnicode_Decode:function (const s:PAnsiChar; size: NativeInt; const encoding : PAnsiChar; const errors: PAnsiChar):PPyObject; cdecl;
19021902
PyUnicode_AsEncodedString:function (unicode:PPyObject; const encoding:PAnsiChar; const errors:PAnsiChar):PPyObject; cdecl;
19031903
PyUnicode_FromOrdinal:function (ordinal:integer):PPyObject; cdecl;
1904+
PyUnicode_GetSize:function (unicode:PPyObject):NativeInt; cdecl;
19041905
PyWeakref_GetObject: function ( ref : PPyObject) : PPyObject; cdecl;
19051906
PyWeakref_NewProxy: function ( ob, callback : PPyObject) : PPyObject; cdecl;
19061907
PyWeakref_NewRef: function ( ob, callback : PPyObject) : PPyObject; cdecl;
@@ -3981,6 +3982,7 @@ procedure TPythonInterface.MapDll;
39813982
PyUnicode_Decode :=Import(AnsiString(Format('PyUnicode%s_Decode',[GetUnicodeTypeSuffix])));
39823983
PyUnicode_AsEncodedString :=Import(AnsiString(Format('PyUnicode%s_AsEncodedString',[GetUnicodeTypeSuffix])));
39833984
PyUnicode_FromOrdinal :=Import(AnsiString(Format('PyUnicode%s_FromOrdinal',[GetUnicodeTypeSuffix])));
3985+
PyUnicode_GetSize :=Import(AnsiString(Format('PyUnicode%s_GetSize',[GetUnicodeTypeSuffix])));
39843986
PyWeakref_GetObject :=Import('PyWeakref_GetObject');
39853987
PyWeakref_NewProxy :=Import('PyWeakref_NewProxy');
39863988
PyWeakref_NewRef :=Import('PyWeakref_NewRef');
@@ -6272,7 +6274,7 @@ function TPythonEngine.PyUnicode_AsWideString( obj : PPyObject ) : UnicodeString
62726274
begin
62736275
if PyUnicode_Check(obj) then
62746276
begin
6275-
_size := PySequence_Length(obj);
6277+
_size := PyUnicode_GetSize(obj);
62766278
if _size > 0 then
62776279
begin
62786280
{$IFDEF LINUX}

0 commit comments

Comments
 (0)