public inbox for glibc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug argparse/28081] New: getopt_long doesn't return error on ambigouos option
@ 2021-07-12 15:55 mlichvar at redhat dot com
  2021-07-12 16:01 ` [Bug argparse/28081] getopt_long doesn't return error on ambiguous option mlichvar at redhat dot com
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: mlichvar at redhat dot com @ 2021-07-12 15:55 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=28081

            Bug ID: 28081
           Summary: getopt_long doesn't return error on ambigouos option
           Product: glibc
           Version: unspecified
            Status: NEW
          Severity: normal
          Priority: P2
         Component: argparse
          Assignee: unassigned at sourceware dot org
          Reporter: mlichvar at redhat dot com
  Target Milestone: ---

An option which partially matches multiple getopt long options doesn't produce
an error.

Reproducer:
#include <stdio.h>
#include <getopt.h>

int main(void) {
        const char *argv[] = {"a", "--f", "b", NULL };
        int index, c;

        static struct option long_options[] = {
                {"foobar", required_argument, 0, 0},
                {"foobaz", required_argument, 0, 0},
                {0, 0, 0, 0}
        };

        c = getopt_long(3, (char **)argv, "", long_options, &index);

        printf("c=%d index=%d\n", c, index);
}

Actual result:
c=0 index=0

Expected result:
option '--f' is ambiguous; possibilities: '--foobar' '--foobaz'
c=63 index=0

More information:
It seems this doesn't happen when the two options are different in the
required_argument vs no_argument setting.

Observed on Fedora 34 using glibc-2.33-16.fc34.x86_64.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug argparse/28081] getopt_long doesn't return error on ambiguous option
  2021-07-12 15:55 [Bug argparse/28081] New: getopt_long doesn't return error on ambigouos option mlichvar at redhat dot com
@ 2021-07-12 16:01 ` mlichvar at redhat dot com
  2021-07-12 16:12 ` schwab@linux-m68k.org
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: mlichvar at redhat dot com @ 2021-07-12 16:01 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=28081

Miroslav Lichvar <mlichvar at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|getopt_long doesn't return  |getopt_long doesn't return
                   |error on ambigouos option   |error on ambiguous option
            Version|unspecified                 |2.33
           Severity|normal                      |minor

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug argparse/28081] getopt_long doesn't return error on ambiguous option
  2021-07-12 15:55 [Bug argparse/28081] New: getopt_long doesn't return error on ambigouos option mlichvar at redhat dot com
  2021-07-12 16:01 ` [Bug argparse/28081] getopt_long doesn't return error on ambiguous option mlichvar at redhat dot com
@ 2021-07-12 16:12 ` schwab@linux-m68k.org
  2021-07-12 16:15 ` mlichvar at redhat dot com
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: schwab@linux-m68k.org @ 2021-07-12 16:12 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=28081

Andreas Schwab <schwab@linux-m68k.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |NOTABUG
             Status|NEW                         |RESOLVED

--- Comment #1 from Andreas Schwab <schwab@linux-m68k.org> ---
That's not a bug.  The two options are exactly equivalent, so there is no
ambiguity.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug argparse/28081] getopt_long doesn't return error on ambiguous option
  2021-07-12 15:55 [Bug argparse/28081] New: getopt_long doesn't return error on ambigouos option mlichvar at redhat dot com
  2021-07-12 16:01 ` [Bug argparse/28081] getopt_long doesn't return error on ambiguous option mlichvar at redhat dot com
  2021-07-12 16:12 ` schwab@linux-m68k.org
@ 2021-07-12 16:15 ` mlichvar at redhat dot com
  2021-07-12 17:56 ` schwab@linux-m68k.org
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: mlichvar at redhat dot com @ 2021-07-12 16:15 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=28081

Miroslav Lichvar <mlichvar at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|NOTABUG                     |---

--- Comment #2 from Miroslav Lichvar <mlichvar at redhat dot com> ---
They are not equivalent. They have a different index, which is how the
application where I came across this issue recognizes them.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug argparse/28081] getopt_long doesn't return error on ambiguous option
  2021-07-12 15:55 [Bug argparse/28081] New: getopt_long doesn't return error on ambigouos option mlichvar at redhat dot com
                   ` (2 preceding siblings ...)
  2021-07-12 16:15 ` mlichvar at redhat dot com
@ 2021-07-12 17:56 ` schwab@linux-m68k.org
  2021-07-13  7:34 ` mlichvar at redhat dot com
  2021-07-19  7:48 ` mlichvar at redhat dot com
  5 siblings, 0 replies; 7+ messages in thread
From: schwab@linux-m68k.org @ 2021-07-12 17:56 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=28081

Andreas Schwab <schwab@linux-m68k.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |NOTABUG
             Status|REOPENED                    |RESOLVED

--- Comment #3 from Andreas Schwab <schwab@linux-m68k.org> ---
You need to use a different val.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug argparse/28081] getopt_long doesn't return error on ambiguous option
  2021-07-12 15:55 [Bug argparse/28081] New: getopt_long doesn't return error on ambigouos option mlichvar at redhat dot com
                   ` (3 preceding siblings ...)
  2021-07-12 17:56 ` schwab@linux-m68k.org
@ 2021-07-13  7:34 ` mlichvar at redhat dot com
  2021-07-19  7:48 ` mlichvar at redhat dot com
  5 siblings, 0 replies; 7+ messages in thread
From: mlichvar at redhat dot com @ 2021-07-13  7:34 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=28081

--- Comment #4 from Miroslav Lichvar <mlichvar at redhat dot com> ---
Ok, if you don't plan to fix this issue, it would be good to have it described
in the getopt_long() man page, or at least fix the example it contains to not
use the same val for different options, so new projects are less likely to fall
into this trap. I'll see if I can submit a patch for the man pages.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug argparse/28081] getopt_long doesn't return error on ambiguous option
  2021-07-12 15:55 [Bug argparse/28081] New: getopt_long doesn't return error on ambigouos option mlichvar at redhat dot com
                   ` (4 preceding siblings ...)
  2021-07-13  7:34 ` mlichvar at redhat dot com
@ 2021-07-19  7:48 ` mlichvar at redhat dot com
  5 siblings, 0 replies; 7+ messages in thread
From: mlichvar at redhat dot com @ 2021-07-19  7:48 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=28081

--- Comment #5 from Miroslav Lichvar <mlichvar at redhat dot com> ---
FWIW, the getopt code checks also for a different flag, not just val and
has_arg. A minimal workaround, at least when the struct config is not
reallocated, is to point the flag to the val itself, e.g.

opts[i].flag = &opts[i].val;

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-07-19  7:48 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-12 15:55 [Bug argparse/28081] New: getopt_long doesn't return error on ambigouos option mlichvar at redhat dot com
2021-07-12 16:01 ` [Bug argparse/28081] getopt_long doesn't return error on ambiguous option mlichvar at redhat dot com
2021-07-12 16:12 ` schwab@linux-m68k.org
2021-07-12 16:15 ` mlichvar at redhat dot com
2021-07-12 17:56 ` schwab@linux-m68k.org
2021-07-13  7:34 ` mlichvar at redhat dot com
2021-07-19  7:48 ` mlichvar at redhat dot com

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).