NetBSD-Bugs archive

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

Re: bin/42463: Bizarre behavior in awk with invalid numeric constants



The following reply was made to PR bin/42463; it has been noted by GNATS.

From: David Holland <dholland-bugs%netbsd.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: 
Subject: Re: bin/42463: Bizarre behavior in awk with invalid numeric
        constants
Date: Sat, 23 Jan 2010 19:55:52 +0000

 On Sat, Dec 19, 2009 at 05:05:03AM +0000, Greg A. Woods wrote:
  >> This is not so surprising, although one would expect it to generate a
  >> syntax error (recall that awk doesn't handle hex integer constants...)
  >  
  >  Well, a syntax error would not really be correct so far as I can tell,
  >  maybe not even for constants in the program text.
 
 For arbitrary values, yes, but for constants in the program text?
 Surely those should be rejected if they aren't actually numbers.
 
  >  However as you've shown it doesn't seem as though things actually work
  >  the way _I_ would expect when it comes to expressions containing
  >  un-quoted non-numeric constants with numeric prefixes.
 
 Right. Whatever is going on is deeper than just running strtol() on
 some bogus strings gotten out of the program text.
 
  >  Interestingly to me awk and mawk behave in exactly the same bizarre way:
  >  
  >  $ awk 'BEGIN{v = 0xblegh - 5; printf("%s\n", v) }'
  >  0-5
  >  $ mawk 'BEGIN{v = 0xblegh - 5; printf("%s\n", v) }'
  >  0-5
  >  $ gawk 'BEGIN{v = 0xblegh - 5; printf("%s\n", v) }'
  >  11-5
  >  
  >  Those examples really do floor me.  What an amazing side effect, and
  >  identically in two different implementations!
 
 Yeah...
 
  >  To avoid any possible code parser issues we can feed the value in as
  >  input, and indeed that does then seem to have a better result, though
  >  still not entirely an expected result since, IIUC, neither awk nor mawk
  >  should interpret hex for input values, but apparently they do:
  >  
  >  [...]
  >  23:07 [603] $ echo "0xblegh" | awk '{v = $1} END{printf("%s\n", v + 0)}'
  >  11
 
 That seems broken, yes...
 
 -- 
 David A. Holland
 dholland%netbsd.org@localhost
 


Home | Main Index | Thread Index | Old Index