bug-indent
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-indent] Re: unhelpful error message: unknown option ""


From: John E Hein
Subject: [Bug-indent] Re: unhelpful error message: unknown option ""
Date: Wed, 2 Nov 2005 13:45:30 -0700

John E Hein wrote at 12:34 -0700 on Nov  2, 2005:
 > After updating from 2.2.6 to 2.2.9, I had a problem with the
 > --no-parameter-indentation option I was using.
 > 
 > As it turns out, it was removed in favor of using
 > just --parameter-indentation0.  The documentation was not
 > updated.  That's a different bug.

Sorry that part was a hasty guess.  So it hasn't been removed.

It turns out there is another bug, but it's the option table setup for
"nip" if BERKELEY_DEFAULTS [*] is defined.  It's missing the extra NUL
in the p_obj field.

This causes the loop in the PRO_SETTINGS case of the p_type switch in
set_options() to overrun a buffer and walk off into uncharted memory
recursively calling set_options again until it sees a double NUL in
the random memory or exits for other reasons.  In my case, it always
seems to die with "unknown option" before it gets too far.

I am running the FreeBSD port (defines BERKELEY_DEFAULTS), which is
why I noticed.

[*] The mostly duplicated initialization of the opts table with and
without BERKELEY_DEFAULTS is a design bug, IMO.

Here's a new and improved patch that includes a fix for this and the
fix for the previously reported error message bug...

--- args.c.orig Sun Nov 10 14:02:48 2002
+++ args.c      Wed Nov  2 13:29:11 2005
@@ -230,7 +230,7 @@
     {"npcs",    PRO_BOOL,                           false,      OFF, 
&settings.proc_calls_space,                 &exp_pcs},
     {"nlps",    PRO_BOOL,                           false,      OFF, 
&settings.leave_preproc_space,              &exp_lps},
     {"nlp",     PRO_BOOL,                            true,      OFF, 
&settings.lineup_to_parens,                 &exp_lp},
-    {"nip",     PRO_SETTINGS,                           0, ONOFF_NA, (int *) 
"-ip0",                             &exp_nip},
+    {"nip",     PRO_SETTINGS,                           0, ONOFF_NA, (int *) 
"-ip0\0",                             &exp_nip},
     {"nhnl",    PRO_BOOL,                            true,      OFF, 
&settings.honour_newlines,                  &exp_hnl},
     {"nfca",    PRO_BOOL,                            true,      OFF, 
&settings.format_comments,                  &exp_fca},
     {"nfc1",    PRO_BOOL,                            true,      OFF, 
&settings.format_col1_comments,             &exp_fc1},
@@ -714,7 +714,7 @@
 
     if (!found)
     {
-        fprintf (stderr, _("indent: unknown option \"%s\"\n"), option - 1);
+        fprintf (stderr, _("indent: unknown option \"%s\"\n"), option);
         exit (invocation_error);
     }
     else





reply via email to

[Prev in Thread] Current Thread [Next in Thread]