From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id 487a954e for ; Fri, 28 Jun 2019 22:18:32 +0000 (UTC) Received: (qmail 1098 invoked by alias); 28 Jun 2019 22:18:23 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 44469 Received: (qmail 1724 invoked by uid 1010); 28 Jun 2019 22:18:23 -0000 X-Qmail-Scanner-Diagnostics: from kahlil.inlv.org by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.101.2/25489. spamassassin: 3.4.2. Clear:RC:0(37.59.109.123):SA:0(-1.9/5.0):. Processed in 1.665486 secs); 28 Jun 2019 22:18:23 -0000 X-Envelope-From: martijn@inlv.org X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at inlv.org does not designate permitted sender hosts) To: Zsh hackers list From: Martijn Dekker Subject: [PATCH] getopts: fix returned value on missing option argument Message-ID: <2363fe35-c213-d4b6-2bc5-642328dd28f4@inlv.org> Date: Sat, 29 Jun 2019 00:17:42 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------C3F9CB88E81E5BFFE416BAFB" Content-Language: en-GB --------------C3F9CB88E81E5BFFE416BAFB Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Problem: $ zsh -c 'while getopts x: opt; do echo "$opt"; done' dummy -x zsh:1: argument expected after -x option : Expected output: the ':' at the end should be a '?'. The opt variable should only be set to ':' in "quiet" mode, i.e. if the option string starts with a ':' (so in this case would be ':x:'). Ref.: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html (the two bullet points following "If an option-argument is missing:"). The attached patch fixes this to match POSIX and the behaviour of every other shell. - Martijn -- modernish -- harness the shell https://github.com/modernish/modernish --------------C3F9CB88E81E5BFFE416BAFB Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="BUG_GETOPTSMA.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="BUG_GETOPTSMA.patch" ZGlmZiAtLWdpdCBhL1NyYy9idWlsdGluLmMgYi9TcmMvYnVpbHRpbi5jCmluZGV4IGU4NjNj YzRiYi4uOWI5ZTc2Yzc3IDEwMDY0NAotLS0gYS9TcmMvYnVpbHRpbi5jCisrKyBiL1NyYy9i dWlsdGluLmMKQEAgLTU1MTEsMTQgKzU1MTEsMTIgQEAgYmluX2dldG9wdHMoVU5VU0VEKGNo YXIgKm5hbWUpLCBjaGFyICoqYXJndiwgVU5VU0VEKE9wdGlvbnMgb3BzKSwgVU5VU0VEKGlu dCBmdW4KICAgICAvKiBjaGVjayBmb3IgbGVnYWxpdHkgKi8KICAgICBpZihvcGNoID09ICc6 JyB8fCAhKHAgPSBtZW1jaHIob3B0c3RyLCBvcGNoLCBsZW5vcHRzdHIpKSkgewogCXAgPSAi PyI7Ci0gICAgZXJyOgogCXpzZnJlZSh6b3B0YXJnKTsKIAlzZXRzcGFyYW0odmFyLCB6dHJk dXAocCkpOwogCWlmKHF1aWV0KSB7CiAJICAgIHpvcHRhcmcgPSBtZXRhZnkob3B0YnVmLCBs ZW5vcHRidWYsIE1FVEFfRFVQKTsKIAl9IGVsc2UgewotCSAgICB6d2FybigqcCA9PSAnPycg PyAiYmFkIG9wdGlvbjogJWMlYyIgOgotCQkgICJhcmd1bWVudCBleHBlY3RlZCBhZnRlciAl YyVjIG9wdGlvbiIsCisJICAgIHp3YXJuKCJiYWQgb3B0aW9uOiAlYyVjIiwKIAkJICAiPy0r IltsZW5vcHRidWZdLCBvcGNoKTsKIAkgICAgem9wdGFyZz16dHJkdXAoIiIpOwogCX0KQEAg LTU1MjksOCArNTUyNywxNyBAQCBiaW5fZ2V0b3B0cyhVTlVTRUQoY2hhciAqbmFtZSksIGNo YXIgKiphcmd2LCBVTlVTRUQoT3B0aW9ucyBvcHMpLCBVTlVTRUQoaW50IGZ1bgogICAgIGlm KHBbMV0gPT0gJzonKSB7CiAJaWYob3B0Y2luZCA9PSBsZW5zdHIpIHsKIAkgICAgaWYoIWFy Z3Nbem9wdGluZF0pIHsKLQkJcCA9ICI6IjsKLQkJZ290byBlcnI7CisJCXpzZnJlZSh6b3B0 YXJnKTsKKwkJaWYocXVpZXQpIHsKKwkJICAgIHNldHNwYXJhbSh2YXIsIHp0cmR1cCgiOiIp KTsKKwkJICAgIHpvcHRhcmcgPSBtZXRhZnkob3B0YnVmLCBsZW5vcHRidWYsIE1FVEFfRFVQ KTsKKwkJfSBlbHNlIHsKKwkJICAgIHNldHNwYXJhbSh2YXIsIHp0cmR1cCgiPyIpKTsKKwkJ ICAgIHpvcHRhcmcgPSB6dHJkdXAoIiIpOworCQkgICAgendhcm4oImFyZ3VtZW50IGV4cGVj dGVkIGFmdGVyICVjJWMgb3B0aW9uIiwKKwkJCSAgIj8tKyJbbGVub3B0YnVmXSwgb3BjaCk7 CisJCX0KKwkJcmV0dXJuIDA7CiAJICAgIH0KIAkgICAgcCA9IHp0cmR1cChhcmdzW3pvcHRp bmQrK10pOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvVGVzdC9CMTBnZXRvcHRzLnp0c3QgYi9U ZXN0L0IxMGdldG9wdHMuenRzdAppbmRleCA3ZWJhNWE0YjEuLjcyYzllMjA5ZSAxMDA2NDQK LS0tIGEvVGVzdC9CMTBnZXRvcHRzLnp0c3QKKysrIGIvVGVzdC9CMTBnZXRvcHRzLnp0c3QK QEAgLTc5LDMgKzc5LDIwIEBACiAgIHRlc3RfZ2V0b3B0cyAreAogMTpvbmUgaWxsZWdhbCBv cHRpb24sICsgdmFyaWFudAogPnRlc3RfZ2V0b3B0czozOiBiYWQgb3B0aW9uOiAreAorCisg IHNldCAtLSAteAorICBPUFRJTkQ9MQorICB3aGlsZSBnZXRvcHRzIHg6IG9wdDsgZG8KKyAg ICBlY2hvICIkb3B0LCR7T1BUQVJHOi1FbXB0eX0iCisgIGRvbmUKKzA6bWlzc2luZyBvcHRp b24tYXJndW1lbnQgKGVycm9yIG1lc3NhZ2UgbW9kZSkKKz4/LEVtcHR5Cis/KGV2YWwpOjM6 IGFyZ3VtZW50IGV4cGVjdGVkIGFmdGVyIC14IG9wdGlvbgorCisgIHNldCAtLSAteAorICBP UFRJTkQ9MQorICB3aGlsZSBnZXRvcHRzIDp4OiBvcHQ7IGRvCisgICAgZWNobyAiJG9wdCwk e09QVEFSRzotRW1wdHl9IgorICBkb25lCiswOm1pc3Npbmcgb3B0aW9uLWFyZ3VtZW50IChx dWlldCBtb2RlKQorPjoseAo= --------------C3F9CB88E81E5BFFE416BAFB--