summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoriyoshi Koizumi <moriyoshi@php.net>2004-07-20 18:16:36 +0000
committerMoriyoshi Koizumi <moriyoshi@php.net>2004-07-20 18:16:36 +0000
commitc210c68add35bc19305fb772e2e96278ea350dfe (patch)
treeabf0f32d1ab79f49774778ec0446c8f2a0a9b4df
parent3e026f08ae3fa11b398b01a43871c3cb1c8b4f54 (diff)
downloadphp-git-c210c68add35bc19305fb772e2e96278ea350dfe.tar.gz
- Add more null checks.
-rw-r--r--ext/standard/filters.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/ext/standard/filters.c b/ext/standard/filters.c
index 41f2e7f962..6fd4da1688 100644
--- a/ext/standard/filters.c
+++ b/ext/standard/filters.c
@@ -307,6 +307,7 @@ typedef enum _php_conv_err_t {
PHP_CONV_ERR_INVALID_SEQ,
PHP_CONV_ERR_UNEXPECTED_EOS,
PHP_CONV_ERR_EXISTS,
+ PHP_CONV_ERR_ALLOC,
PHP_CONV_ERR_NOT_FOUND
} php_conv_err_t;
@@ -1167,13 +1168,20 @@ static php_conv_err_t php_conv_get_string_prop_ex(const HashTable *ht, char **pr
if (zend_hash_find((HashTable *)ht, field_name, field_name_len, (void **)&tmpval) == SUCCESS) {
if (Z_TYPE_PP(tmpval) != IS_STRING) {
zval zt = **tmpval;
+
convert_to_string(&zt);
- *pretval = pemalloc(Z_STRLEN(zt) + 1, persistent);
+
+ if (NULL == (*pretval = pemalloc(Z_STRLEN(zt) + 1, persistent))) {
+ return PHP_CONV_ERR_ALLOC;
+ }
+
*pretval_len = Z_STRLEN(zt);
memcpy(*pretval, Z_STRVAL(zt), Z_STRLEN(zt) + 1);
zval_dtor(&zt);
} else {
- *pretval = pemalloc(Z_STRLEN_PP(tmpval) + 1, persistent);
+ if (NULL == (*pretval = pemalloc(Z_STRLEN_PP(tmpval) + 1, persistent))) {
+ return PHP_CONV_ERR_ALLOC;
+ }
*pretval_len = Z_STRLEN_PP(tmpval);
memcpy(*pretval, Z_STRVAL_PP(tmpval), Z_STRLEN_PP(tmpval) + 1);
}