disallow 'x' in hex numbers (except leading '0x')
Gisle Aas [Fri, 16 Oct 1998 16:33:12 +0000 (18:33 +0200)]
Message-ID: <m3n26wtw47.fsf@furu.g.aas.no>
Subject: Re: [PATCH 5.005_52] 'x' is not a legal hex digit

p4raw-id: //depot/perl@2054

perlvars.h
t/op/oct.t
util.c

index c79c37d..d42353d 100644 (file)
@@ -194,7 +194,7 @@ PERLVAR(Glast_swash_slen,   STRLEN)
 /* constants (these are not literals to facilitate pointer comparisons) */
 PERLVARIC(GYes,                char *, "1")
 PERLVARIC(GNo,         char *, "")
-PERLVARIC(Ghexdigit,   char *, "0123456789abcdef0123456789ABCDEFx")
+PERLVARIC(Ghexdigit,   char *, "0123456789abcdef0123456789ABCDEF")
 PERLVARIC(Gpatleave,   char *, "\\.^$@dDwWsSbB+*?|()-nrtfeaxc0123456789[{]}")
 
 PERLVAR(Gspecialsv_list[4],SV *)       /* from byterun.h */
index 24b5c43..6623089 100755 (executable)
@@ -1,8 +1,6 @@
 #!./perl
 
-# $RCSfile: oct.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:08 $
-
-print "1..8\n";
+print "1..9\n";
 
 print +(oct('01234') == 01234) ? "ok" : "not ok", " 1\n";
 print +(oct('0x1234') == 0x1234) ? "ok" : "not ok", " 2\n";
@@ -12,3 +10,4 @@ print +(oct('x80000000') == 0x80000000) ? "ok" : "not ok", " 5\n";
 print +(hex('80000000') == 0x80000000) ? "ok" : "not ok", " 6\n";
 print +(oct('1234') == 668) ? "ok" : "not ok", " 7\n";
 print +(hex('1234') == 4660) ? "ok" : "not ok", " 8\n";
+print +(hex('0x1234') == 0x1234) ? "ok" : "not ok", " 9\n";
diff --git a/util.c b/util.c
index e47b95d..873fcd8 100644 (file)
--- a/util.c
+++ b/util.c
@@ -2451,7 +2451,7 @@ scan_hex(char *start, I32 len, I32 *retlen)
     while (len-- && *s) {
        tmp = strchr((char *) PL_hexdigit, *s++);
        if (!tmp) {
-           if (*(s-1) == '_')
+           if (*(s-1) == '_' || (*(s-1) == 'x' && retval == 0))
                continue;
            else {
                dTHR;