summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--ext/bcmath/bcmath.c16
2 files changed, 11 insertions, 6 deletions
diff --git a/NEWS b/NEWS
index da8ff4af0d..bd12cfb9c7 100644
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,7 @@ PHP NEWS
- Added missing open_basedir checks to CGI. (anight at eyelinkmedia dot com,
Tony)
- Added missing format validator to unpack() function. (Ilia)
+- Added missing error check inside bcpowmod(). (Ilia)
- Fixed several integer overflows in ImageCreate(), ImageCreateTrueColor(),
ImageCopyResampled() and ImageFilledPolygon() reported by Mattias Bengtsson.
(Tony)
diff --git a/ext/bcmath/bcmath.c b/ext/bcmath/bcmath.c
index 3925c5e311..7c6ebe5255 100644
--- a/ext/bcmath/bcmath.c
+++ b/ext/bcmath/bcmath.c
@@ -465,13 +465,17 @@ PHP_FUNCTION(bcpowmod)
scale_int = (int) ((int)scale < 0) ? 0 : scale;
- bc_raisemod(first, second, mod, &result, scale_int TSRMLS_CC);
- if (result->n_scale > scale) {
- result->n_scale = scale;
+ if (bc_raisemod(first, second, mod, &result, scale_int TSRMLS_CC) != -1) {
+ if (result->n_scale > scale) {
+ result->n_scale = scale;
+ }
+ Z_STRVAL_P(return_value) = bc_num2str(result);
+ Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
+ Z_TYPE_P(return_value) = IS_STRING;
+ } else {
+ RETVAL_FALSE;
}
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
+
bc_free_num(&first);
bc_free_num(&second);
bc_free_num(&mod);