Crashes with wrongly freed ansi strings in 3.2.1 fixes / ok in trunk
Original Reporter info from Mantis: Martin @martin_frb
-
Reporter name: Martin Friebe
Original Reporter info from Mantis: Martin @martin_frb
- Reporter name: Martin Friebe
Description:
The Code below (its just copied and pasted from the LCL, to include the parts needed to trigger the issue)...
It works fine in 3.0.4 and in trunk.
It wrongly frees strings in 3.2.0 and 3.2.1
The errors in 3.2.1 are different from 3.2.0, leading to believe that part of the fix may have been merged.
(Some errors can also be observed on Windows, only tested 3.2.0)
Valgrind log attached.
One of the traces suggests that for
function GetCodePoint(const S: String; const Index: PtrInt): string;
the same variable is passed for "s" and "result", as the memory for "s" is freed in "result := '';".
fpc -B -MObjFPC -Scghi -Cg -O1 -gw3 -gl -gv -l -vewnhibq -al project1.lpr
Steps to reproduce:
program project1;
{$mode objfpc}{$H+}
function GetCodePoint(const S: String; const Index: PtrInt): string;
//equivalent for Result := S[Index], but for Utf8 encoded strings
var
p: PChar;
PLen: PtrInt;
Res: AnsiString; //intermediate needed for PChar -> String -> ShortString assignement
begin
Result := '';
writeln(index, ' // ', length(s), ' // ');
p := @s[1 + (index and 3) ];
PLen := 1;
Res := p;
SetLength(Res,PLen);
Result := Res;
end;
function UTF8Length(p: PChar; ByteCount: PtrInt): PtrInt;
var
CharLen: LongInt;
begin
Result:=0;
while (ByteCount>0) do begin
if byte(p^)<192 then
inc(result);
inc (p);
dec(ByteCount);
end;
end;
function UTF8Length(const s: string): PtrInt; inline;
begin
Result:=UTF8Length(PChar(s),length(s));
end;
procedure foo(v: string);
var
s: ShortString;
i: Integer;
begin
s := v;
for i := 0 to UTF8Length(s) do begin
if GetCodePoint(s,i) = #1 then writeln;
end;
writeln(v);
v := 'a';
end;
var v1: string;
begin
v1 := copy('ahtnoeuouauec',2,11);
foo(v1);
readln;
end.
Additional information:
algrind-3.15.0 and LibVEX; rerun with -h for copyright info ==88588== Command: ./project1 ==88588== ==88588== Invalid read of size 8 ==88588== at 0x4012BB: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:12) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520c8 is 24 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== 0 // 11 // ==88588== Invalid read of size 1 ==88588== at 0x40E6F0: fpc_pchar_to_ansistr (astrings.inc:553) ==88588== by 0x401320: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:16) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520d0 is 32 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== ==88588== Invalid read of size 16 ==88588== at 0x401CB7: SYSTEM_$$_INDEXBYTE$formal$INT64$BYTE$$INT64 (x86_64.inc:490) ==88588== by 0x40E710: fpc_pchar_to_ansistr (astrings.inc:556) ==88588== by 0x401320: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:16) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520d0 is 32 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== ==88588== Invalid read of size 8 ==88588== at 0x4018E0: SYSTEM_$$_MOVE$formal$formal$INT64 (x86_64.inc:134) ==88588== by 0x401320: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:16) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520d0 is 32 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== ==88588== Invalid read of size 1 ==88588== at 0x401900: SYSTEM_$$_MOVE$formal$formal$INT64 (x86_64.inc:147) ==88588== by 0x401320: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:16) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520d8 is 40 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== ==88588== Invalid read of size 1 ==88588== at 0x40190B: SYSTEM_$$_MOVE$formal$formal$INT64 (x86_64.inc:151) ==88588== by 0x401320: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:16) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520da is 42 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== ==88588== Invalid read of size 8 ==88588== at 0x40EDF1: fpc_ansistr_setlength (astrings.inc:784) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x40150B: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520c0 is 16 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== ==88588== Invalid read of size 2 ==88588== at 0x40EE88: fpc_ansistr_setlength (astrings.inc:800) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x40150B: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520b8 is 8 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== ==88588== Invalid read of size 8 ==88588== at 0x40EE9C: fpc_ansistr_setlength (astrings.inc:802) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x40150B: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520c8 is 24 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== ==88588== Invalid read of size 8 ==88588== at 0x4018E0: SYSTEM_$$_MOVE$formal$formal$INT64 (x86_64.inc:134) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x40150B: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520d0 is 32 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== ==88588== Invalid read of size 1 ==88588== at 0x401900: SYSTEM_$$_MOVE$formal$formal$INT64 (x86_64.inc:147) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x40150B: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520d8 is 40 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== ==88588== Invalid read of size 1 ==88588== at 0x40190B: SYSTEM_$$_MOVE$formal$formal$INT64 (x86_64.inc:151) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x40150B: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520da is 42 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== ==88588== Invalid read of size 8 ==88588== at 0x40DB34: fpc_ansistr_decr_ref (astrings.inc:146) ==88588== by 0x40EEDC: fpc_ansistr_setlength (astrings.inc:808) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x40150B: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520c0 is 16 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56) ==88588== ==88588== Invalid read of size 8 ==88588== at 0x401E85: SYSTEM_$$_DECLOCKED$INT64$$BOOLEAN (x86_64.inc:721) ==88588== by 0x40EEDC: fpc_ansistr_setlength (astrings.inc:808) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x40150B: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Address 0x4a520c0 is 16 bytes inside a block of size 44 free'd ==88588== at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E22F: CMEM_$$_CFREEMEM$POINTER$$QWORD (cmem.pp:75) ==88588== by 0x41D902: SYSTEM_$$_FREEMEM$POINTER$$QWORD (heap.inc:324) ==88588== by 0x40DB54: fpc_ansistr_decr_ref (astrings.inc:149) ==88588== by 0x40DBD5: fpc_ansistr_assign (astrings.inc:186) ==88588== by 0x401280: P$PROJECT1_$$_GETCODEPOINT$ANSISTRING$INT64$$ANSISTRING (project1.lpr:11) ==88588== by 0x401525: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:47) ==88588== by 0x401638: main (project1.lpr:56) ==88588== Block was alloc'd at ==88588== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==88588== by 0x42E1E8: CMEM_$$_CGETMEM$QWORD$$POINTER (cmem.pp:62) ==88588== by 0x41D7E9: SYSTEM_$$_GETMEM$POINTER$QWORD (heap.inc:284) ==88588== by 0x40DAAC: SYSTEM_$$_NEWANSISTRING$INT64$$POINTER (astrings.inc:115) ==88588== by 0x40EDB2: fpc_ansistr_setlength (astrings.inc:776) ==88588== by 0x40E625: fpc_shortstr_to_ansistr (astrings.inc:510) ==88588== by 0x4014AC: P$PROJECT1_$$_FOO$ANSISTRING (project1.lpr:46) ==88588== by 0x401638: main (project1.lpr:56)
==88588==