X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/bfdc8cd3d5a81ab176f7d530d2e692897463c97d..c0734505dda7c70c48ff2cc5f95bb57bcbe04ba0:/dquote.c diff --git a/dquote.c b/dquote.c index ef03046..6913ca5 100644 --- a/dquote.c +++ b/dquote.c @@ -46,17 +46,18 @@ Perl_grok_bslash_c(pTHX_ const char source, const bool output_warning) clearer[i++] = result; clearer[i++] = '\0'; - Perl_ck_warner_d(aTHX_ packWARN2(WARN_SYNTAX,WARN_DEPRECATED), - "\"\\c%c\" is more clearly written simply as \"%s\". " - "This will be a fatal error in Perl 5.28", - source, clearer); + Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), + "\"\\c%c\" is more clearly written simply as \"%s\"", + source, + clearer); } return result; } bool -Perl_grok_bslash_o(pTHX_ char **s, UV *uv, const char** error_msg, +Perl_grok_bslash_o(pTHX_ char **s, const char * const send, UV *uv, + const char** error_msg, const bool output_warning, const bool strict, const bool silence_non_portable, const bool UTF) @@ -68,13 +69,16 @@ Perl_grok_bslash_o(pTHX_ char **s, UV *uv, const char** error_msg, * It guarantees that the returned codepoint, *uv, when expressed as * utf8 bytes, would fit within the skipped "\o{...}" bytes. * On input: - * s is the address of a pointer to a NULL terminated string that begins - * with 'o', and the previous character was a backslash. At exit, *s - * will be advanced to the byte just after those absorbed by this - * function. Hence the caller can continue parsing from there. In - * the case of an error, this routine has generally positioned *s to - * point just to the right of the first bad spot, so that a message - * that has a "<--" to mark the spot will be correctly positioned. + * s is the address of a pointer to a string. **s is 'o', and the + * previous character was a backslash. At exit, *s will be advanced + * to the byte just after those absorbed by this function. Hence the + * caller can continue parsing from there. In the case of an error, + * this routine has generally positioned *s to point just to the right + * of the first bad spot, so that a message that has a "<--" to mark + * the spot will be correctly positioned. + * send - 1 gives a limit in *s that this function is not permitted to + * look beyond. That is, the function may look at bytes only in the + * range *s..send-1 * uv points to a UV that will hold the output value, valid only if the * return from the function is TRUE * error_msg is a pointer that will be set to an internal buffer giving an @@ -96,15 +100,10 @@ Perl_grok_bslash_o(pTHX_ char **s, UV *uv, const char** error_msg, * ourselves */ | PERL_SCAN_SILENT_ILLDIGIT; -#ifdef DEBUGGING - char *start = *s - 1; - assert(*start == '\\'); -#endif - PERL_ARGS_ASSERT_GROK_BSLASH_O; - - assert(**s == 'o'); + assert(*(*s - 1) == '\\'); + assert(* *s == 'o'); (*s)++; if (**s != '{') { @@ -112,7 +111,7 @@ Perl_grok_bslash_o(pTHX_ char **s, UV *uv, const char** error_msg, return FALSE; } - e = strchr(*s, '}'); + e = (char *) memchr(*s, '}', send - *s); if (!e) { (*s)++; /* Move past the '{' */ while (isOCTAL(**s)) { /* Position beyond the legal digits */ @@ -163,7 +162,8 @@ Perl_grok_bslash_o(pTHX_ char **s, UV *uv, const char** error_msg, } bool -Perl_grok_bslash_x(pTHX_ char **s, UV *uv, const char** error_msg, +Perl_grok_bslash_x(pTHX_ char **s, const char * const send, UV *uv, + const char** error_msg, const bool output_warning, const bool strict, const bool silence_non_portable, const bool UTF) @@ -176,13 +176,16 @@ Perl_grok_bslash_x(pTHX_ char **s, UV *uv, const char** error_msg, * utf8 bytes, would fit within the skipped "\x{...}" bytes. * * On input: - * s is the address of a pointer to a NULL terminated string that begins - * with 'x', and the previous character was a backslash. At exit, *s - * will be advanced to the byte just after those absorbed by this - * function. Hence the caller can continue parsing from there. In - * the case of an error, this routine has generally positioned *s to - * point just to the right of the first bad spot, so that a message - * that has a "<--" to mark the spot will be correctly positioned. + * s is the address of a pointer to a string. **s is 'x', and the + * previous character was a backslash. At exit, *s will be advanced + * to the byte just after those absorbed by this function. Hence the + * caller can continue parsing from there. In the case of an error, + * this routine has generally positioned *s to point just to the right + * of the first bad spot, so that a message that has a "<--" to mark + * the spot will be correctly positioned. + * send - 1 gives a limit in *s that this function is not permitted to + * look beyond. That is, the function may look at bytes only in the + * range *s..send-1 * uv points to a UV that will hold the output value, valid only if the * return from the function is TRUE * error_msg is a pointer that will be set to an internal buffer giving an @@ -201,14 +204,12 @@ Perl_grok_bslash_x(pTHX_ char **s, UV *uv, const char** error_msg, char* e; STRLEN numbers_len; I32 flags = PERL_SCAN_DISALLOW_PREFIX; -#ifdef DEBUGGING - char *start = *s - 1; - assert(*start == '\\'); -#endif + PERL_ARGS_ASSERT_GROK_BSLASH_X; - assert(**s == 'x'); + assert(*(*s - 1) == '\\'); + assert(* *s == 'x'); (*s)++; if (strict || ! output_warning) { @@ -233,7 +234,7 @@ Perl_grok_bslash_x(pTHX_ char **s, UV *uv, const char** error_msg, return TRUE; } - e = strchr(*s, '}'); + e = (char *) memchr(*s, '}', send - *s); if (!e) { (*s)++; /* Move past the '{' */ while (isXDIGIT(**s)) { /* Position beyond the legal digits */