]> granicus.if.org Git - php/commitdiff
Use unsigned chars in php_uuencode()
authorNikita Popov <nikita.ppv@gmail.com>
Wed, 19 Jun 2019 11:23:02 +0000 (13:23 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 19 Jun 2019 13:09:00 +0000 (15:09 +0200)
Avoid shift UB on signed integers.

ext/standard/uuencode.c

index bfe605a49b283bdac6e3ef5122dc6e59ad9344d2..dbc99a963498071562cf6a5d8c9ba3e344bfa4a2 100644 (file)
 PHPAPI zend_string *php_uuencode(char *src, size_t src_len) /* {{{ */
 {
        size_t len = 45;
-       char *p, *s, *e, *ee;
+       unsigned char *p, *s, *e, *ee;
        zend_string *dest;
 
        /* encoded length is ~ 38% greater than the original
        Use 1.5 for easier calculation.
     */
        dest = zend_string_safe_alloc(src_len/2, 3, 46, 0);
-       p = ZSTR_VAL(dest);
-       s = src;
-       e = src + src_len;
+       p = (unsigned char *) ZSTR_VAL(dest);
+       s = (unsigned char *) src;
+       e = s + src_len;
 
        while ((s + 3) < e) {
                ee = s + len;
@@ -122,7 +122,7 @@ PHPAPI zend_string *php_uuencode(char *src, size_t src_len) /* {{{ */
        *p++ = '\n';
        *p = '\0';
 
-       dest = zend_string_truncate(dest, p - ZSTR_VAL(dest), 0);
+       dest = zend_string_truncate(dest, (char *) p - ZSTR_VAL(dest), 0);
        return dest;
 }
 /* }}} */