bitwiseworks / libc

LIBC Next (kLIBC fork)
9 stars 4 forks source link

fsetpos() causes a crash -- no problem, it's my fault :-) #122

Closed gp-Digi closed 2 years ago

gp-Digi commented 2 years ago

Describe the bug The fsetpos() function call causes a crash.

To Reproduce Compiling a simple example:

#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv) {
  FILE  *pfFile = fopen( "myfile", "rt" );
  puts( "call fsetpos()..." );
  fsetpos( pfFile, 0 );
  puts( "Done" );
  return 0;
}

The result of executing the compiled code

call fsetpos()...

Killed by SIGSEGV
pid=0x0c66 ppid=0x0a2b tid=0x0001 slot=0x00ee pri=0x0200 mc=0x0001 ps=0x0010
G:\PROJECTS\M\~\E\A.EXE
A 3:000f0053
cs:eip=0000:02120053      ss:esp=0000:00000000      ebp=0212fe00
 ds=0000      es=1d400dc8      fs=0000      gs=0040     efl=00000000
eax=0212ff8c ebx=0212fdc8 ecx=1ffb645c edx=0212fddc edi=0000150b esi=00000001
Creating 0C66_01.TRP
Moved 0c66_01.TRP to C:\6221f358-0c66_01-A-exceptq.txt

Contents of the .TRP file

______________________________________________________________________

 Exception Report - created 2022/03/04 11:09:12
______________________________________________________________________

 LIBC: Killed by SIGSEGV

 Hostname:         DigiWrkPlace
 OS2/eCS Version:  2.45
 # of Processors:  2
 Physical Memory:  3487 mb
 Virt Addr Limit:  2048 mb
 Exceptq Version:  7.11.5-shl BETA8 (Jun  1 2020 18:37:02)

______________________________________________________________________

 Exception C0000005 - Access Violation
______________________________________________________________________

 Process:  G:\PROJECTS\M\~\E\A.EXE (03/04/2022 11:09:04 89,305)
 PID:      C66 (3174)
 TID:      01 (1)
 Priority: 200

 Filename: D:\UNIXROOT\USR\LIB\LIBCN0.DLL (08/27/2021 01:13:22 1,266,106)
 Address:  005B:1EEF54F1 (0001:000754F1)
 Cause:    Attempted to read from 00000004
           (not a valid address)

______________________________________________________________________

 Failing Instruction
______________________________________________________________________

 1EEF54E1  MOV EBP, ESP              (89e5)
 1EEF54E3  SUB ESP, 0x18             (83ec 18)
 1EEF54E6  MOV DWORD [ESP+0xc], 0x0  (c74424 0c 00000000)
 1EEF54EE  MOV EAX, [EBP+0xc]        (8b45 0c)
 1EEF54F1 >MOV EDX, [EAX+0x4]        (8b50 04)
 1EEF54F4  MOV EAX, [EAX]            (8b00)
 1EEF54F6  MOV [ESP+0x4], EAX        (894424 04)
 1EEF54FA  MOV [ESP+0x8], EDX        (895424 08)

______________________________________________________________________

 Registers
______________________________________________________________________

 EAX : 00000000   EBX  : 0212FF80   ECX : 000202C2   EDX  : 1D3A90BC
 ESI : 00000000   EDI  : 00000000
 ESP : 0212FF30   EBP  : 0212FF48   EIP : 1EEF54F1   EFLG : 00010206
 CS  : 005B       CSLIM: FFFFFFFF   SS  : 0053       SSLIM: FFFFFFFF

 EAX : not a valid address
 EBX : read/write memory on this thread's stack
 ECX : read/write memory at 0002:000002C2 in A
 EDX : read/write memory at 0003:000090BC in LIBCN0
 ESI : not a valid address
 EDI : not a valid address

______________________________________________________________________

 Stack Info for Thread 01
______________________________________________________________________

   Size       Base        ESP         Max         Top
 00100000   02130000 -> 0212FF30 -> 0212D000 -> 02030000

______________________________________________________________________

 Call Stack
______________________________________________________________________

   EBP     Address    Module     Obj:Offset    Nearest Public Symbol
 --------  ---------  --------  -------------  -----------------------
 Trap  ->  1EEF54F1   LIBCN0    0001:000754F1 

 0212FF48  000100A7   A         0001:000000A7  between _main + 46 and ___do_global_dtors - 19

 0212FF78  00010027   A         0001:00000027  between __text + 27 and _main - 3A

 0212FFE0  1EEB384B   LIBCN0    0001:0003384B 

______________________________________________________________________

 Labels on the Stack
______________________________________________________________________

   ESP     Address    Module     Obj:Offset    Nearest Public Symbol
 --------  ---------  --------  -------------  -----------------------
 0212FF34  1EEC8C10   LIBCN0    0001:00048C10 
 0212FF4C  000100A7   A         0001:000000A7  between _main + 46 and ___do_global_dtors - 19
 0212FF60  1EE812BB   LIBCN0    0001:000012BB 
 0212FF74  1EE9A103   LIBCN0    0001:0001A103 
 0212FF7C  00010027   A         0001:00000027  between __text + 27 and _main - 3A
 0212FF90  1EEE9990   LIBCN0    0001:00069990 
 0212FFC4  1EE9A0A4   LIBCN0    0001:0001A0A4 
 0212FFE4  1EEB384B   LIBCN0    0001:0003384B 
 0212FFEC  1FFB91E0   DOSCALL1  0002:000091E0 Can not open DOSCALL1.DLL (23)

______________________________________________________________________

 Stack Contents from ESP-100 to Stack Base  (ESP = 0212FF30)
______________________________________________________________________

 --addr--   --------------dwords---------------   -----chars------
 0212FE30 : F96DCB4C F96DCB1C F96DCB4C FFED8709 : L.m...m.L.m.....
 0212FE40 : 00000160 00000160 0000EAD8 FA704AB0 : `...`........Jp.
 0212FE50 : 0008F000 0000EBDC FFF2C02E F96DCAD8 : ..............m.
 0212FE60 : F96DCCFC F96DCCFC FFFFFFFF F96DCB1C : ..m...m.......m.
 0212FE70 : 00000000 0000150B 00000053 00000053 : ........S...S...
 0212FE80 : 00000000 00000000 00000000 0212FF80 : ................
 0212FE90 : 000202C2 1D3A90BC 0212FF48 1EEF54F1 : ......:.H....T..
 0212FEA0 : 0000005B 00010206 0212FF30 00000053 : [.......0...S...
 0212FEB0 : 1D3A9114 1D3A9114 0212FED8 1EEDDECF : ..:...:.........
 0212FEC0 : 00010018 00040000 00000040 0212FEEC : ........@.......
 0212FED0 : 0212FEF0 00010042 0212FF18 1EEEAA32 : ....B.......2...
 0212FEE0 : 1D3A9114 00040000 00000040 000001A4 : ..:.....@.......
 0212FEF0 : 00001499 00002010 00000001 1EEFBB9C : ..... ..........
 0212FF00 : 1D3A908C 00000000 0212FF28 0212FF80 : ..:.....(.......
 0212FF10 : 1D3A908C 00000000 0212FF48 1EEFBCD1 : ..:.....H.......
 0212FF20 : 0001004A 00010043 00010040 00000040 : J...C...@...@...
 0212FF30 : 00000001 1EEC8C10 00000001 00000000 : ................
 0212FF40 : 00000000 00000000 0212FF78 000100A7 : ........x.......
 0212FF50 : 00000000 00000000 00020008 0212FFDC : ................
 0212FF60 : 1EE812BB 00000001 00000000 00000000 : ................
 0212FF70 : 0212FFE0 1EE9A103 0212FFE0 00010027 : ............'...
 0212FF80 : 00000001 0212FF94 20030180 FFFFFFFF : ........... ....
 0212FF90 : 1EEE9990 0212FF9D 00000000 5C3A4780 : .............G:\
 0212FFA0 : 6A6F7270 73746365 7E5C4D5C 615C655C : projects\M\~\e\a
 0212FFB0 : 6578652E 00000000 00000000 00000050 : .exe........P...
 0212FFC0 : 00000020 1EE9A0A4 00000001 00000000 :  ...............
 0212FFD0 : 00000000 00000000 00000000 00000000 : ................
 0212FFE0 : 00000000 1EEB384B 00000001 1FFB91E0 : ....K8..........
 0212FFF0 : 00001499 00000000 02130000 02130C75 : ............u...

______________________________________________________________________

 Memory addressed by EBX (0212FF80) for 128 bytes
______________________________________________________________________

 --addr--   -----dwords------   ---------bytes---------   -chars--
 0212FF80 : 00000001 0212FF94 : 01 00 00 00 94 FF 12 02 : ........
 0212FF88 : 20030180 FFFFFFFF : 80 01 03 20 FF FF FF FF : ... ....
 0212FF90 : 1EEE9990 0212FF9D : 90 99 EE 1E 9D FF 12 02 : ........
 0212FF98 : 00000000 5C3A4780 : 00 00 00 00 80 47 3A 5C : .....G:\
 0212FFA0 : 6A6F7270 73746365 : 70 72 6F 6A 65 63 74 73 : projects
 0212FFA8 : 7E5C4D5C 615C655C : 5C 4D 5C 7E 5C 65 5C 61 : \M\~\e\a
 0212FFB0 : 6578652E 00000000 : 2E 65 78 65 00 00 00 00 : .exe....
 0212FFB8 : 00000000 00000050 : 00 00 00 00 50 00 00 00 : ....P...
 0212FFC0 : 00000020 1EE9A0A4 : 20 00 00 00 A4 A0 E9 1E :  .......
 0212FFC8 : 00000001 00000000 : 01 00 00 00 00 00 00 00 : ........
 0212FFD0 : 00000000 00000000 : 00 00 00 00 00 00 00 00 : ........
 0212FFD8 : 00000000 00000000 : 00 00 00 00 00 00 00 00 : ........
 0212FFE0 : 00000000 1EEB384B : 00 00 00 00 4B 38 EB 1E : ....K8..
 0212FFE8 : 00000001 1FFB91E0 : 01 00 00 00 E0 91 FB 1F : ........
 0212FFF0 : 00001499 00000000 : 99 14 00 00 00 00 00 00 : ........

______________________________________________________________________

 Memory addressed by ECX (000202C2) for 256 bytes
______________________________________________________________________

 --addr--   -----dwords------   ---------bytes---------   -chars--
 000202C2 : 00000000 00000000 : 00 00 00 00 00 00 00 00 : ........
 000203BA : 31 lines not printed duplicate the line above

______________________________________________________________________

 Memory addressed by EDX (1D3A90BC) for 256 bytes
______________________________________________________________________

 --addr--   -----dwords------   ---------bytes---------   -chars--
 1D3A90BC : 0001000C 6D660001 : 0C 00 01 00 01 00 66 6D : ......fm
 1D3A90C4 : 00000000 1EE973E0 : 00 00 00 00 E0 73 E9 1E : .....s..
 1D3A90CC : 1D3A01DC 06000044 : DC 01 3A 1D 44 00 00 06 : ..:.D...
 1D3A90D4 : 00000000 00000000 : 00 00 00 00 00 00 00 00 : ........
 1D3A90DC : 00000000 00000000 : 00 00 00 00 00 00 00 00 : ........
 1D3A90E4 : 00000002 000200C2 : 02 00 00 00 C2 00 02 00 : ........
 1D3A90EC : 00000000 00000000 : 00 00 00 00 00 00 00 00 : ........
 1D3A90F4 : 00000000 00000000 : 00 00 00 00 00 00 00 00 : ........
 1D3A90FC : 1EEE3060 0001000D : 60 30 EE 1E 0D 00 01 00 : `0......
 1D3A9104 : 6D660001 00000000 : 01 00 66 6D 00 00 00 00 : ..fm....
 1D3A910C : 1EE973E0 1D3A01DC : E0 73 E9 1E DC 01 3A 1D : .s....:.
 1D3A9114 : 06000044 00000000 : 44 00 00 06 00 00 00 00 : D.......
 1D3A911C : 00000000 00000000 : 00 00 00 00 00 00 00 00 : ........
 1D3A9124 : 00000000 FFFFFFFF : 00 00 00 00 FF FF FF FF : ........
 1D3A912C : 00000000 00000000 : 00 00 00 00 00 00 00 00 : ........
 1D3A9134 : 00000000 00000000 : 00 00 00 00 00 00 00 00 : ........
 1D3A913C : 00000000 1EEE3060 : 00 00 00 00 60 30 EE 1E : ....`0..
 1D3A9144 : 00010018 6D660001 : 18 00 01 00 01 00 66 6D : ......fm
 1D3A914C : 00000000 1EEEA892 : 00 00 00 00 92 A8 EE 1E : ........
 1D3A9154 : 1D3A01DC 00000000 : DC 01 3A 1D 00 00 00 00 : ..:.....
 1D3A915C : 00000000 00000000 : 00 00 00 00 00 00 00 00 : ........
 1D3A918C : 6 lines not printed duplicate the line above
 1D3A9194 : 00000000 1D3A01DC : 00 00 00 00 DC 01 3A 1D : ......:.
 1D3A919C : 00000000 00000000 : 00 00 00 00 00 00 00 00 : ........

______________________________________________________________________

 DLLs accessible from this process
______________________________________________________________________

 DOSCALLS                   08/12/2017 09:35:27    870,880 C:\OS2KRNL
 DISTORM  0eb60000 0000a274 11/12/2012 16:43:02     57,491 D:\UNIXROOT\USR\LIB\DISTORM.DLL

______________________________________________________________________

 End of Exception Report - report took 5 ms to generate
______________________________________________________________________
StevenLevine commented 2 years ago

While it would be better if kLIBC returned a error rather than trapping, you are calling fsetpos incorrectly. The prototype is

int fsetpos(FILE , const fpos_t );

gp-Digi commented 2 years ago

Oh, indeed! Thank you.