* prof_parse.c (parse_std_line): Rewrite handling of whitespace in and after
authorKen Raeburn <raeburn@mit.edu>
Sat, 28 Aug 2004 02:05:39 +0000 (02:05 +0000)
committerKen Raeburn <raeburn@mit.edu>
Sat, 28 Aug 2004 02:05:39 +0000 (02:05 +0000)
tag, to strip trailing whitespace (per current locale, not just ASCII space
characters), and prohibit any internal space characters in tag names.

(This is not the patch supplied in the bug report; that patch changed the tag
handling to allow spaces in tag names, which we haven't previously allowed.  On
the other hand, we haven't specifically disallowed internal tabs or other
whitespace, either, and this patch does so.)

ticket: 2614

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16697 dc483132-0cff-0310-8789-dd5450dbe970

src/util/profile/ChangeLog
src/util/profile/prof_parse.c

index 1e4331b4049611e3e547486b065491722ea5295b..c7b4be1e1e6d887f0b629cd5743f50d6cfdd0a43 100644 (file)
@@ -1,5 +1,10 @@
 2004-08-27  Ken Raeburn  <raeburn@mit.edu>
 
+       * prof_parse.c (parse_std_line): Rewrite handling of whitespace in
+       and after tag, to strip trailing whitespace (per current locale,
+       not just ASCII space characters), and prohibit any internal space
+       characters in tag names.
+
        * profile.swg: New file.
        * configure.in: Look for Tcl.
        * Makefile.in (profile_tcl, profile_tcl.c, profile_tcl.o): New
index 87966f05ea9a7b7133190bac6a5cfdc742cd57f6..042379dd25f2b838e80a6016afd8c7e8e3471822 100644 (file)
@@ -146,13 +146,22 @@ static errcode_t parse_std_line(char *line, struct parse_state *state)
        cp = strchr(cp, '=');
        if (!cp)
                return PROF_RELATION_SYNTAX;
+       if (cp == tag)
+           return PROF_RELATION_SYNTAX;
        *cp = '\0';
-       p = strchr(tag, ' ');
-       if (p) {
-               *p = '\0';
-               p = skip_over_blanks(p+1);
-               if (p != cp)
-                       return PROF_RELATION_SYNTAX;
+       p = tag;
+       /* Look for whitespace on left-hand side.  */
+       while (p < cp && !isspace((int)*p))
+           p++;
+       if (p < cp) {
+           /* Found some sort of whitespace.  */
+           *p++ = 0;
+           /* If we have more non-whitespace, it's an error.  */
+           while (p < cp) {
+               if (!isspace((int)*p))
+                   return PROF_RELATION_SYNTAX;
+               p++;
+           }
        }
        cp = skip_over_blanks(cp+1);
        value = cp;