iliaa Tue Aug 24 11:25:48 2004 EDT
Modified files:
/php-src/ext/standard uuencode.c
Log:
Fixed bug #29821 (Fixed possible crashes in convert_uudecode() on invalid
data).
http://cvs.php.net/diff.php/php-src/ext/standard/uuencode.c?r1=1.3&r2=1.4&ty=u
Index: php-src/ext/standard/uuencode.c
diff -u php-src/ext/standard/uuencode.c:1.3 php-src/ext/standard/uuencode.c:1.4
--- php-src/ext/standard/uuencode.c:1.3 Thu Jan 8 03:17:35 2004
+++ php-src/ext/standard/uuencode.c Tue Aug 24 11:25:48 2004
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: uuencode.c,v 1.3 2004/01/08 08:17:35 andi Exp $ */
+/* $Id: uuencode.c,v 1.4 2004/08/24 15:25:48 iliaa Exp $ */
/*
* Portions of this code are based on Berkeley's uuencode/uudecode
@@ -136,9 +136,18 @@
if ((len = PHP_UU_DEC(*s++)) <= 0) {
break;
}
+ /* sanity check */
+ if (len > src_len) {
+ goto err;
+ }
+
total_len += len;
ee = s + (len == 45 ? 60 : (int) floor(len * 1.33));
+ /* sanity check */
+ if (ee > e) {
+ goto err;
+ }
while (s < ee) {
*p++ = PHP_UU_DEC(*s) << 2 | PHP_UU_DEC(*(s + 1)) >> 4;
@@ -168,6 +177,10 @@
*(*dest + total_len) = '\0';
return total_len;
+
+err:
+ efree(*dest);
+ return -1;
}
/* {{{ proto string uuencode(string data)
@@ -199,6 +212,10 @@
}
dst_len = php_uudecode(src, src_len, &dst);
+ if (dst_len < 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "The given parameter is
not a valid uuencoded string.");
+ RETURN_FALSE;
+ }
RETURN_STRINGL(dst, dst_len, 0);
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php