Coder Social home page Coder Social logo

Comments (4)

hholst80 avatar hholst80 commented on July 19, 2024 1

@felipensp good-first-issue To invite newcomers to start working on vlib?

from v.

HydroH avatar HydroH commented on July 19, 2024

Hi, I found there was logic on handling such characters, but they were commented out in a previous commit:
1bfcdaa#diff-61ea029cc6cc2d797366920e750069365bfbdddee28865dd540928cbd6048c95R76
What is the reason behind this?

from v.

hholst80 avatar hholst80 commented on July 19, 2024

Spawn ["sh", "-c", arg] with arg untouched.

I think we should strive to allow exactly the same thing as the native "sh -c" will allow. A little experimentation reveals that we should not strip away the line feeds rather keep them. Control flow characters are perfectly valid to send to sh -c arg as arg. A linefeed will be interpreted as a sequence of statements. One can probably send a shell script as-is as the arg just by keeping the control characters as-is.

sh-5.2# sh -c "$(echo -e "ps 1\n\n")"
  PID TTY      STAT   TIME COMMAND
    1 ?        S      0:00 /sbin/init
sh-5.2# sh -c "ps 1"
  PID TTY      STAT   TIME COMMAND
    1 ?        S      0:00 /sbin/init
sh-5.2# sh -c "$(echo -e "ps\n1\n")"
  PID TTY          TIME CMD
25947 pts/4    00:00:01 fish
26060 pts/4    00:00:00 sh
26105 pts/4    00:00:00 sh
26106 pts/4    00:00:00 ps
sh: line 2: 1: command not found
sh-5.2# sh -c "$(echo -e "echo 1\necho 2")"
1
2
sh-5.2# sh -c "$(echo -e "true\nfalse")"
sh-5.2# echo $?
1
sh-5.2# sh -c "$(echo -e "false\ntrue")"
sh-5.2# echo $?
0
sh-5.2#

Notice that sh responded sh: line 2: 1: command not found there. arg is actually a script. everything allowed in a script should be allowed in arg.

from v.

hholst80 avatar hholst80 commented on July 19, 2024

The tl;dr from the above analysis is that we should feed the linefeeds etc as-is. No filtering should be done.

The issue I ran into is due is the redirection stuff we add on the top. I think we can remove that. popen does nothing of that sort and I think we do not want to add a bunch of logic on top of what the C popen/pclose does.

EDIT: I was too late to the party to have an opinion on that, as we already had tests that checked for the stderr redirection. ;-) Anyways, I reworked how redirection is done to be a separate statement up front. This is likely very fragile and will only work for simple "one liners". If raw Posix shell execution is required, use popen.

image

from v.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.