cosmopolitan/libc/runtime
Gavin Hayes 9c5a7795ad
vista: backport execve escaping and using cocmd as shell for system, etc. (#660)
* Introduce testlib_extract() helper

* Have execve() escape double quotes in cmd.exe's preferred style

This makes it possible for us to use system() and popen() with paths
that redirect to filenames that contain spaces, e.g.

    system("echo.com hello >\"hello there.txt\"")

It's difficult to solve this problem, because WIN32 only allows passing
one single argument when launching programs and each program is allowed
to tokenize that however it wants. Most software follows the convention
of cmd.exe which is poorly documented and positively byzantine.

In the future we're going to solve this by not using cmd.exe at all and
instead embedding the cocmd.com interpreter into the system() function.
In the meantime, our documentation has been updated to help recalibrate
any expectation the user might hold regarding the security of using the
Windows command interpreter.

Fixes #644

* Introduce double quote support in cocmd.com shell

* Add some tests for execve()

* Embed cocmd.com interpreter for system() / open()

This change lets you use system() in an easier and portable way. The
problem with the call in the past has always been that bourne and
cmd.com on Windows have less than nothing in common, so pretty much the
only command system() could be used for across platforms was maybe echo.
cmd.exe is also a security liability due to its escaping rules.

Since cocmd.com implements 85% of what we need from bourne, in a really
tiny way, it makes perfect sense to be embedded in these functionss. We
get a huge performance boost too.

Fixes #644

* Support whitespace after cocmd output redirection

Co-authored-by: Justine Tunney <jtunney@gmail.com>
2022-10-11 21:17:50 -07:00
..
__utmpxname.S Add finger demo to redbean and fix regression 2022-06-23 03:42:05 -07:00
abort.c Add notpossible keyword 2022-09-03 20:35:31 -07:00
arch_prctl.c Perform more low-level code cleanup 2022-09-09 04:07:08 -07:00
brk.c Remove more nonstandard stuff from cosmopolitan.h 2021-03-01 00:18:23 -08:00
buffer.h Initial import 2020-06-15 07:18:57 -07:00
clearenv.c Introduce --strace flag for system call tracing 2022-03-18 18:07:28 -07:00
clktck.c Backport main branch improvements (#658) 2022-10-10 20:44:29 -07:00
clktck.h Make major improvements to redbean and libraries 2021-04-18 12:34:15 -07:00
close_s.c Improve locks and signals 2022-04-12 05:20:17 -07:00
closesymboltable.c Reduce makefile dependencies by 10% 2022-06-08 20:01:28 -07:00
cosmo.S Fix issue with stack creation on OpenBSD 2022-08-14 01:19:58 -07:00
directmap.internal.h Improve signals and memory protection 2022-04-12 22:11:00 -07:00
dlfcn.h Get Fabrice Bellard's JavaScript engine to build 2021-04-09 01:06:57 -07:00
dsohandle.S Introduce --strace flag for system call tracing 2022-03-18 18:07:28 -07:00
e820.internal.h Support malloc() on bare metal 2021-02-24 00:53:24 -08:00
efimain.greg.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
enable_threads.c Tidy up the threading implementation 2022-09-10 02:56:25 -07:00
enable_tls.c Clean up the TLS code 2022-09-10 11:49:13 -07:00
endutent.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
endutxent.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
exit.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
exit2.c Support malloc() on bare metal 2021-02-24 00:53:24 -08:00
ezmap.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
ezmap.internal.h Improve documentation 2020-12-27 07:02:35 -08:00
fegetround.c Get Fabrice Bellard's JavaScript engine to build 2021-04-09 01:06:57 -07:00
fenv.c Get Fabrice Bellard's JavaScript engine to build 2021-04-09 01:06:57 -07:00
fenv.h Get Fabrice Bellard's JavaScript engine to build 2021-04-09 01:06:57 -07:00
fesetround.c Fix issues revealed by ECMAScript test262 2021-04-10 17:15:35 -07:00
findcombinary.c Make improvements 2022-04-28 09:57:07 -07:00
finddebugbinary.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
fltrounds.c Fix issues revealed by ECMAScript test262 2021-04-10 17:15:35 -07:00
fork-nt.c Tidy up the threading implementation 2022-09-10 02:56:25 -07:00
fork.c Tidy up the threading implementation 2022-09-10 02:56:25 -07:00
fpathconf.c Make more compatibility improvements 2022-09-06 12:36:34 -07:00
fpreset.S Clean old .source directive out of asm code 2022-03-18 12:43:21 -07:00
free_s.c Improve locks and signals 2022-04-12 05:20:17 -07:00
ftrace-hook.S Make some systemic improvements 2022-05-18 16:52:36 -07:00
ftraceinit.greg.c Make some systemic improvements 2022-05-18 16:52:36 -07:00
ftracer.c Remove stdio lock macros from amalgamation 2022-09-10 12:03:36 -07:00
gc.h Make garbage collection thread safe 2022-09-08 02:33:01 -07:00
gc.internal.h Fix regression in _gclongjmp() 2021-08-19 09:34:24 -07:00
getargmax.c Make improvements 2022-04-28 09:57:07 -07:00
getdosargv.c vista: backport execve escaping and using cocmd as shell for system, etc. (#660) 2022-10-11 21:17:50 -07:00
getdosenviron.c vista: backport execve escaping and using cocmd as shell for system, etc. (#660) 2022-10-11 21:17:50 -07:00
getinstructionlengths.c Support thread local storage 2022-05-16 13:20:08 -07:00
getinterpreterexecutablename.c Backport main branch improvements (#658) 2022-10-10 20:44:29 -07:00
getlogin.c Backport main branch improvements (#658) 2022-10-10 20:44:29 -07:00
getlogin_r.c Backport main branch improvements (#658) 2022-10-10 20:44:29 -07:00
getmaxfd.c Reduce Makefile dependencies by 4% 2022-05-23 15:07:01 -07:00
getmemtracksize.c Add malloc logging tool 2022-05-26 23:19:22 -07:00
getpagesize.S Clean old .source directive out of asm code 2022-03-18 12:43:21 -07:00
getresourcelimit.c Reduce makefile dependencies by 10% 2022-06-08 20:01:28 -07:00
getsymbolname.c Improve memory safety 2021-10-13 17:27:13 -07:00
getsymboltable.c Tidy up the threading implementation 2022-09-10 02:56:25 -07:00
getutent.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
getutid.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
getutxent.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
getutxid.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
getutxline.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
grow.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
hook.greg.c Don't relocate file descriptor memory 2022-09-09 16:54:28 -07:00
inflate.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
init.S Reduce build graph by another 14 percent 2022-08-17 20:01:21 -07:00
interceptflag.greg.c Improve synchronization 2022-04-15 15:31:55 -07:00
internal.h Clean up the TLS code 2022-09-10 11:49:13 -07:00
isdynamicexecutable.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
isheap.c Fix some issues and do some code cleanup 2022-05-23 10:15:53 -07:00
ismemtracked.greg.c Make some more fixups 2022-06-12 09:37:17 -07:00
jmpstack.S Improve signals and memory protection 2022-04-12 22:11:00 -07:00
ldso.c Get Fabrice Bellard's JavaScript engine to build 2021-04-09 01:06:57 -07:00
mapanon.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
mapelfread.c Change license 2020-12-27 17:18:44 -08:00
mapshared.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
mapstack.c Add phtread_setname_np() and pthread_getname_np() 2022-09-07 19:04:05 -07:00
memtrack.internal.h Get cosmopolitation working on Vista again (#635) 2022-10-04 01:20:39 -07:00
memtrack32.txt Fix build breakage in MODE=dbg 2022-06-15 19:37:39 -07:00
memtrack64.txt Use *NSYNC for POSIX threads locking APIs 2022-09-11 11:04:50 -07:00
memtracknt.c Make improvements 2022-04-07 00:15:35 -07:00
metalprintf.greg.c Improve synchronization 2022-04-15 15:31:55 -07:00
metalprintf.internal.h Support malloc() on bare metal 2021-02-24 00:53:24 -08:00
mman.internal.h [WIP] Get bare metal working outside of an emulator (#609) 2022-09-15 12:02:28 -07:00
mmap.c Tidy up the threading implementation 2022-09-10 02:56:25 -07:00
morph.greg.c Perform more low-level code cleanup 2022-09-09 04:07:08 -07:00
mprotect-nt.greg.c Clean up some of the threading code 2022-09-08 12:31:56 -07:00
mprotect.c Clean up some code 2022-08-20 12:32:51 -07:00
mremap.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
msync-nt.c Clean up some of the threading code 2022-09-08 12:31:56 -07:00
msync.c Reduce Makefile dependencies by 4% 2022-05-23 15:07:01 -07:00
munmap.c Clean up some of the threading code 2022-09-08 12:31:56 -07:00
openexecutable.S Fix Redbean when file is read-only (#365) 2022-03-14 17:13:28 -07:00
opensymboltable.greg.c Clean up some code 2022-08-20 12:32:51 -07:00
pathconf.h Make more compatibility improvements 2022-09-06 12:36:34 -07:00
pc.internal.h Add syscalls to Blinkenlights and fix bugs 2022-05-13 13:31:21 -07:00
peekall.S Add MODE=optlinux build mode (#141) 2021-10-14 19:36:49 -07:00
printargs.c Reduce build graph by another eight percent 2022-08-13 13:11:56 -07:00
printmaps.c Clean up some of the threading code 2022-09-08 12:31:56 -07:00
progname.S Clean old .source directive out of asm code 2022-03-18 12:43:21 -07:00
runtime.h Backport main branch improvements (#658) 2022-10-10 20:44:29 -07:00
runtime.mk Backport main branch improvements (#658) 2022-10-10 20:44:29 -07:00
setstack.S Remove more nonstandard stuff from cosmopolitan.h 2021-03-01 00:18:23 -08:00
setutent.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
setutxent.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
stack.h Remove malloc() dependency on pledge() / unveil() 2022-07-24 21:51:37 -07:00
stackchkfail.c Fix some issues and do some code cleanup 2022-05-23 10:15:53 -07:00
stackchkfaillocal.c Change license 2020-12-27 17:18:44 -08:00
stackuse.c Clean up some code 2022-08-20 12:32:51 -07:00
straceinit.greg.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
symbolic.h wip on intellisense (again) 2021-02-02 11:14:45 -05:00
symbols.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
symbols.internal.h Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
sysconf.c Reduce makefile dependencies by 10% 2022-06-08 20:01:28 -07:00
sysconf.h Fix a few more Python tests 2021-08-16 23:47:47 -07:00
untrackmemoryintervals.c Make some systemic improvements 2022-05-18 16:52:36 -07:00
unwind.c Fix libunwind stubs 2022-06-26 05:29:25 -07:00
unwind.h Fix libunwind stubs 2022-06-26 05:29:25 -07:00
updwtmp.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
updwtmpx.S Make more compatibility improvements 2022-09-06 07:04:13 -07:00
utmp.h Add finger demo to redbean and fix regression 2022-06-23 03:42:05 -07:00
utmpx.h Add finger demo to redbean and fix regression 2022-06-23 03:42:05 -07:00
valist.c Remove plenty of makefile misconfigurations 2022-07-21 09:20:59 -07:00
vfork.S Don't use vfork() on XNU (#426) 2022-06-23 01:18:47 -07:00
warnifpowersave.c Print warning when microbenchmarking w/ powersave 2022-06-10 21:07:03 -07:00
weakfree.c Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
winargs.internal.h Add torture test for zipos file descriptors 2022-06-15 16:29:49 -07:00
winmain.greg.c Clean up some code 2022-08-20 12:32:51 -07:00