• Jan Beulich's avatar
    lib/vsprintf.c: improve standard conformance of sscanf() · da99075c
    Jan Beulich authored
    Xen's pciback points out a couple of deficiencies with vsscanf()'s
    standard conformance:
    
    - Trailing character matching cannot be checked by the caller: With a
      format string of "(%x:%x.%x) %n" absence of the closing parenthesis
      cannot be checked, as input of "(00:00.0)" doesn't cause the %n to be
      evaluated (because of the code not skipping white space before the
      trailing %n).
    
    - The parameter corresponding to a trailing %n could get filled even if
      there was a matching error: With a format string of "(%x:%x.%x)%n",
      input of "(00:00.0]" would still fill the respective variable pointed to
      (and hence again make the mismatch non-detectable by the caller).
    
    This patch aims at fixing those, but leaves other non-conforming aspects
    of it untouched, among them these possibly relevant ones:
    
    - improper handling of the assignment suppression character '*' (blindly
      discarding all succeeding non-white space from the format and input
      strings),
    
    - not honoring conversion specifiers for %n, - not recognizing the C99
      conversion specifier 't' (recognized by vsprintf()).
    Signed-off-by: default avatarJan Beulich <jbeulich@suse.com>
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    da99075c
vsprintf.c 52.6 KB