This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
util.c: Add some asserts()
authorKarl Williamson <public@khwilliamson.com>
Thu, 8 Nov 2012 18:11:41 +0000 (11:11 -0700)
committerKarl Williamson <public@khwilliamson.com>
Sun, 11 Nov 2012 18:50:11 +0000 (11:50 -0700)
These functions improperly have a signed parameter, when the value
should always be at least 0.  We have a field report that one of them is
getting called with a negative value.  Add asserts to catch this
condition (if compiling assertions is on) earlier.

util.c

diff --git a/util.c b/util.c
index bbb3b0f..28a5ff4 100644 (file)
--- a/util.c
+++ b/util.c
@@ -871,6 +871,8 @@ Perl_foldEQ(const char *s1, const char *s2, register I32 len)
 
     PERL_ARGS_ASSERT_FOLDEQ;
 
+    assert(len >= 0);
+
     while (len--) {
        if (*a != *b && *a != PL_fold[*b])
            return 0;
@@ -891,6 +893,8 @@ Perl_foldEQ_latin1(const char *s1, const char *s2, register I32 len)
 
     PERL_ARGS_ASSERT_FOLDEQ_LATIN1;
 
+    assert(len >= 0);
+
     while (len--) {
        if (*a != *b && *a != PL_fold_latin1[*b]) {
            return 0;
@@ -918,6 +922,8 @@ Perl_foldEQ_locale(const char *s1, const char *s2, register I32 len)
 
     PERL_ARGS_ASSERT_FOLDEQ_LOCALE;
 
+    assert(len >= 0);
+
     while (len--) {
        if (*a != *b && *a != PL_fold_locale[*b])
            return 0;
@@ -974,6 +980,8 @@ Perl_savepvn(pTHX_ const char *pv, register I32 len)
     char *newaddr;
     PERL_UNUSED_CONTEXT;
 
+    assert(len >= 0);
+
     Newx(newaddr,len+1,char);
     /* Give a meaning to NULL pointer mainly for the use in sv_magic() */
     if (pv) {
@@ -2024,6 +2032,8 @@ Perl_my_bcopy(register const char *from,register char *to,register I32 len)
 
     PERL_ARGS_ASSERT_MY_BCOPY;
 
+    assert(len >= 0);
+
     if (from - to >= 0) {
        while (len--)
            *to++ = *from++;
@@ -2047,6 +2057,8 @@ Perl_my_memset(register char *loc, register I32 ch, register I32 len)
 
     PERL_ARGS_ASSERT_MY_MEMSET;
 
+    assert(len >= 0);
+
     while (len--)
        *loc++ = ch;
     return retval;
@@ -2062,6 +2074,8 @@ Perl_my_bzero(register char *loc, register I32 len)
 
     PERL_ARGS_ASSERT_MY_BZERO;
 
+    assert(len >= 0);
+
     while (len--)
        *loc++ = 0;
     return retval;
@@ -2079,6 +2093,8 @@ Perl_my_memcmp(const char *s1, const char *s2, register I32 len)
 
     PERL_ARGS_ASSERT_MY_MEMCMP;
 
+    assert(len >= 0);
+
     while (len--) {
         if ((tmp = *a++ - *b++))
            return tmp;
@@ -3256,6 +3272,8 @@ Perl_repeatcpy(register char *to, register const char *from, I32 len, register I
 {
     PERL_ARGS_ASSERT_REPEATCPY;
 
+    assert(len >= 0);
+
     if (count < 0)
        croak_memory_wrap();