From 67296f0704403c84a5921011dbe44d4fee578cc5 Mon Sep 17 00:00:00 2001 From: Zeev Suraski Date: Fri, 14 May 1999 11:29:34 +0000 Subject: [PATCH] Add \012 and \xff missing support to constant quoted string --- Zend/zend-scanner.l | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/Zend/zend-scanner.l b/Zend/zend-scanner.l index ba18fbdcc0..c11d6943a7 100644 --- a/Zend/zend-scanner.l +++ b/Zend/zend-scanner.l @@ -96,6 +96,9 @@ do { \ } +#define ZEND_IS_OCT(c) ((c)>='0' && (c)<'8') +#define ZEND_IS_HEX(c) (((c)>='0' && (c)<='9') || ((c)>='a' && (c)<='f') || ((c)>='A' && (c)<='F')) + void zend_fatal_scanner_error(char *message) { @@ -1121,8 +1124,37 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ zendlval->value.str.len--; break; default: - *t++ = '\\'; - *t++ = *s; + /* check for an octal */ + if (ZEND_IS_OCT(*s)) { + char octal_buf[4] = { 0, 0, 0, 0 }; + + octal_buf[0] = *s; + zendlval->value.str.len--; + if ((s+1)value.str.len--; + if ((s+1)value.str.len--; + } + } + *t++ = (char) strtol(octal_buf, NULL, 8); + } else if (*s=='x' && (s+1)value.str.len--; /* for the 'x' */ + + hex_buf[0] = *(++s); + zendlval->value.str.len--; + if ((s+1)value.str.len--; + } + *t++ = (char) strtol(hex_buf, NULL, 16); + } else { + *t++ = '\\'; + *t++ = *s; + } break; } s++; -- 2.40.0