summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Williamson <khw@cpan.org>2018-01-22 12:45:14 -0700
committerKarl Williamson <khw@cpan.org>2018-01-22 12:49:20 -0700
commit81b3f640bb2856350fe6a5efe32056accab1d775 (patch)
tree3a5c0476c9b773c3ae192f5e48fed2a2358e4ee8
parent10417d4775a08e4e3438d6f298f69b6ada5e2fea (diff)
downloadperl-81b3f640bb2856350fe6a5efe32056accab1d775.tar.gz
Allow space for NUL is UTF-8 array decls
In grepping the source, I noticed that several arrays that are for holding UTF-8 characters did not allow space for a trailing NUL. This commit adds that.
-rw-r--r--ext/XS-APItest/APItest.pm2
-rw-r--r--ext/XS-APItest/APItest.xs2
-rw-r--r--pp_pack.c4
-rw-r--r--regcomp.c4
-rw-r--r--toke.c2
5 files changed, 7 insertions, 7 deletions
diff --git a/ext/XS-APItest/APItest.pm b/ext/XS-APItest/APItest.pm
index e30838ae3b..8eda0f7a02 100644
--- a/ext/XS-APItest/APItest.pm
+++ b/ext/XS-APItest/APItest.pm
@@ -5,7 +5,7 @@ use strict;
use warnings;
use Carp;
-our $VERSION = '0.95';
+our $VERSION = '0.96';
require XSLoader;
diff --git a/ext/XS-APItest/APItest.xs b/ext/XS-APItest/APItest.xs
index 144d62488d..0ad08237af 100644
--- a/ext/XS-APItest/APItest.xs
+++ b/ext/XS-APItest/APItest.xs
@@ -1452,7 +1452,7 @@ test_uvchr_to_utf8_flags(uv, flags)
SV *uv
SV *flags
PREINIT:
- U8 dest[UTF8_MAXBYTES];
+ U8 dest[UTF8_MAXBYTES + 1];
U8 *ret;
CODE:
diff --git a/pp_pack.c b/pp_pack.c
index 24cdee9714..8937d6d715 100644
--- a/pp_pack.c
+++ b/pp_pack.c
@@ -1288,7 +1288,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
STRLEN retlen;
UV auv;
if (utf8) {
- U8 result[UTF8_MAXLEN];
+ U8 result[UTF8_MAXLEN+1];
const char *ptr = s;
STRLEN len;
/* Bug: warns about bad utf8 even if we are short on bytes
@@ -2643,7 +2643,7 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist )
fromstr = NEXTFROM;
auv = SvUV_no_inf(fromstr, datumtype);
if (utf8) {
- U8 buffer[UTF8_MAXLEN], *endb;
+ U8 buffer[UTF8_MAXLEN+1], *endb;
endb = uvchr_to_utf8_flags(buffer, UNI_TO_NATIVE(auv), 0);
if (cur+(endb-buffer)*UTF8_EXPAND >= end) {
*cur = '\0';
diff --git a/regcomp.c b/regcomp.c
index 54f9fad0ff..d0952cb48f 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -13267,7 +13267,7 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
char *p;
char *s;
#define MAX_NODE_STRING_SIZE 127
- char foldbuf[MAX_NODE_STRING_SIZE+UTF8_MAXBYTES_CASE];
+ char foldbuf[MAX_NODE_STRING_SIZE+UTF8_MAXBYTES_CASE+1];
char *s0;
U8 upper_parse = MAX_NODE_STRING_SIZE;
U8 node_type = compute_EXACTish(pRExC_state);
@@ -17013,7 +17013,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
{
/* Here <value> is indeed a multi-char fold. Get what it is */
- U8 foldbuf[UTF8_MAXBYTES_CASE];
+ U8 foldbuf[UTF8_MAXBYTES_CASE+1];
STRLEN foldlen;
UV folded = _to_uni_fold_flags(
diff --git a/toke.c b/toke.c
index 6e2742742a..5959bc3e9e 100644
--- a/toke.c
+++ b/toke.c
@@ -10563,7 +10563,7 @@ S_scan_str(pTHX_ char *start, int keep_bracketed_quoted, int keep_delims, int re
I32 brackets = 1; /* bracket nesting level */
bool has_utf8 = FALSE; /* is there any utf8 content? */
IV termcode; /* terminating char. code */
- U8 termstr[UTF8_MAXBYTES]; /* terminating string */
+ U8 termstr[UTF8_MAXBYTES+1]; /* terminating string */
STRLEN termlen; /* length of terminating string */
line_t herelines;