Sent with Proton Mail secure email.
On Saturday, December 16th, 2023 at 11:35 AM, Reid <[email protected]>
wrote:
>
>
>
>
>
> Sent with Proton Mail secure email.
>
>
> On Saturday, December 16th, 2023 at 11:26 AM, American Citizen
> [email protected] wrote:
>
>
>
> > Hello:
> >
> > I bumped into a curious problem with the argv variables changing, when a
> > certain file named "1" is added into the local directory of the executable.
> >
> > Here is the test file, a simple program named test.c
> >
> > > #include <stdio.h>
> > > #include <string.h>
> > >
> > > int main(int argc, char **argv) {
> > >
> > > int i=1;
> > > //int STDIN = 1;
> > >
> > > char INCURV[1024] = {'\0'};
> > >
> > > while(i<argc) {
> > > if (!strcmp(argv[i],"-curve")) {
> > > printf("we are here \n");
> > > //strcpy(INCURV,argv[i+1]); STDIN=0; i+=2;
> > > }
> > > i+=1;
> > > }
> > > return 0;
> > > }
> >
> > I compile this file as
> >
> > % gcc -o wack test.c -ggdb
> >
> > (it is too easy to wipe out the source file if the object name almost
> > matches)
> >
> > gcc is gcc version 7.5.0 (SUSE Linux)
> >
> > I have the gdb debugger stop on line 13 "printf("we are here\n");"
> >
> > Using input to the command:
> >
> > % wack -arderivs -curve [0,0,0,-1156,0]
> >
> > when no file named "1" exists in the directory then argv looks okay
> >
> > argv[0] = "/../../wack"
> >
> > argv[1] = "-arderivs"
> >
> > argv[2] = "-curve"
> >
> > argv[3] = "[0,0,0,-1156,0]"
> >
> > argv[4] = 0x0
> >
> > which is all fine and well.
> >
> > I used the touch command to create file "1" in the local directory
> >
> > % touch 1
> >
> > and restart the gdb debugger.
> >
> > argc count = 4 as expected
> >
> > but argv[3] = "1"
> >
> > Is this a bug in c?
> >
> > Why is argv[3] changed?
>
>
> It's a shell issue, not a C issue. The shell is interpreting something in the
> square-bracketed argument as special characters. To avoid it, put the
> argument in quotes.
>
> (gdb) r -arderivs -curve 1
> The program being debugged has been started already.
> Start it from the beginning? (y or n) y
> Starting program: /tmp/wack -arderivs -curve 1
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib64/libthread_db.so.1".
>
> Demo:
>
> (gdb) r -arderivs -curve [0,0,0,-1156,0]
> ...
> Breakpoint 1, main (argc=4, argv=0x7fffffffd568) at test.c:6
> 6 int i=1;
> (gdb) p argv[3]
> $8 = 0x7fffffffd99f "1"
>
> (gdb) r -arderivs -curve "[0,0,0,-1156,0]"
> ...
> Breakpoint 1, main (argc=4, argv=0x7fffffffd558) at test.c:6
> 6 int i=1;
> (gdb) p argv[3]
> $9 = 0x7fffffffd991 "[0,0,0,-1156,0]"
>
Ignore the first part with "r -arderivs -curve 1" -- copy-paste error.
> > Randall