commandlineparser / commandlineparser/commandline

Invalid DataTypes for Default values may cause fatal error that can't be discovered or traced.

未關閉
#340 1 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
C#
星號
4.8k
分支
478
PR 合併指標
30 天內沒有已合併 PR

描述

The following class have option with default value false :

public class Options
{
[Option('r', "read", MetaValue = "FILE", Required = false, HelpText = "Input file with data to process.")]
public string InputFile { get; set; }

[Option('w', "write", MetaValue = "FILE", HelpText = "Output FILE with processed data (otherwise standard output).")]
public string OutputFile { get; set; }

[Option('c', "calculate", HelpText = "calculate")]
public bool Calculate { get; set; }


//@@@@@ error here, Default = false for IEnumerable
//sure Default is wrong in that place, but discovered with code review after hours :)
[Option('g', "generators", Default = false, HelpText = "generator")]
public IEnumerable Generators { get; set; }



[Option('n', MetaValue = "INT", HelpText = "navigate.")]
public bool navigation { get; set; }
}

- No compilation error
- No error if commandline contain values for the option g like: `-r xyz.txt -c -g gen1`
- Exception for this commandline (the option g has no values) : `-r xyz.txt -c `

>Exception: Object of type 'System.Boolean' cannot be converted to type 'System.Collections.Generic.IEnumerable`1[System.String]'

The strange is that the exception can't help to determine where the source of error
It's discovered by accident when i don't pass values for the option g

[Complete TestCase](https://dotnetfiddle.net/h1e5S6)
Sure, i removed the Default from the option and the exception disappeared.

**Suggested Solution**

- Validate the match of the Datatype of the default values before setting it.
- Raise an exception ,e.g, "Parser Error: Invalid Default values for the option `"`.

貢獻指南

這個儲存庫沒有索引到貢獻指南

研究方向

Reproduce the failure using the linked Complete TestCase, especially the option with Default = false and no supplied values. Trace how default values are assigned to option properties; done should include datatype validation and an exception that identifies the affected option instead of an untraceable conversion error.

由索引模型根據 Issue 內容生成。

評估

技術堆疊
csharp
領域
cli
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
42/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。