bug-lilypond
[Top][All Lists]
Advanced

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

Re: Issue 2216 in lilypond: AU: Document all options for lilypond -dhelp


From: lilypond
Subject: Re: Issue 2216 in lilypond: AU: Document all options for lilypond -dhelp
Date: Mon, 19 Mar 2012 13:44:47 +0000


Comment #7 on issue 2216 by address@hidden: AU: Document all options for lilypond -dhelp
http://code.google.com/p/lilypond/issues/detail?id=2216

Well, that's what happens if you say (set! some-symbol value): the variable addressed by the interned symbol some-symbol is assigned a value.

The respective code in main.cc is:
        case 'd':
          {
            string arg (option_parser->optional_argument_str0_);
            ssize eq = arg.find ('=');

            string key = arg;
            string val = "#t";

            if (eq != NPOS)
              {
                key = arg.substr (0, eq);
                val = arg.substr (eq + 1, arg.length () - 1);
              }

            init_scheme_variables_global
            += "(cons \'" + key + " '" + val + ")\n";
          }

This is somewhat disconcerting since init_scheme_variables_global is augmented with text, meaning that it is reasonably easy to sneak in arbitrary code here by supplying a key containing spaces. To me, it would seem reasonably to have the whole of init_scheme_variables_global not evaluated but just read, in which case the expression would rather be
+= "( " + key + " . " + val + " )\n";
of course, if unmatched parens or quotes are contained in key and val, one can again meddle with what is happening here. Instead of building strings here, directly building a Scheme expression would likely make more sense.




reply via email to

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