Sudo doesn't preserves the command line as-is

Ouverte
#117 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
38/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
rust

Piste de recherche

Commencez par reproduire les deux paires de commandes dans cmd.exe avec sudo run --inline -- et comparez la sortie de GetCommandLineW(). Lisez le comportement de la ligne de commande de CreateProcessW et les conventions d’analyse de Microsoft C Runtime citées dans le rapport. Le travail est terminé lorsque les commandes inline préservent l’espacement d’origine et les guillemets intégrés indiqués dans les sorties attendues.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Issue-Bug Needs-Triage
Sudo for Windows version

1.0.1

Windows build number

10.0.26100.2605

Other Software
Steps to reproduce

Start the shell cmd.exe and run these commandlines.

1a)

C:\MeinPath\get-command-line.exe hello    world

1b)

sudo run --inline -- C:\MeinPath\get-command-line.exe hello    world

Replace C:\MeinPath\get-command-line.exe with path to your commandline-outputting tool.

Note the four space characters between “hello” and “world”.

2a)

C:\MeinPath\get-command-line.exe hello"    "world

2b)

sudo run --inline -- C:\MeinPath\get-command-line.exe hello"    "world
Expected Behavior

The expected output of command 1a) is:

C:\MeinPath\get-command-line.exe  hello"    "world

and of 1b):

"C:\MeinPath\get-command-line.exe" hello    world

with four spaces between “hello” and “world”!

The expected output of command 2a) is:

C:\MeinPath\get-command-line.exe  hello"    "world

and of 2b):

"C:\MeinPath\get-command-line.exe" hello"    "world

with the quote characters inbetween “hello” and “world”.

cmd preserves the command-line with all spaces, which was entered by the user, when it builds the lpCommandLine argument for CreateProcessW().

Actual Behavior

The actual behavior is, that the output of 1b) is:

"C:\MeinPath\get-command-line.exe" hello world

without four spaces between “hello” and “world”!

And the output of 2b) is actually:

"C:\MeinPath\get-command-line.exe" "hello    world"

with the quote characters around “hello world”.

See this image:

Image

Comments

The reason that I report this bug, is, that not every program on Windows uses the same logic to split commandline into multiple arguments.
The usual convetion is to do it like the Microsoft C-Runtime. But some programs like cmd.exe itself, do it differently.

If the commandline after the two dashes -- is preserved as-is, it would be the best, I think.

Another helpful program to debug these things is my Rust program "create-process-rust".

Langage dominant
Rust
Étoiles
5.9k
Forks
180
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/sudo

Toutes les issues de microsoft/sudo

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.