Skip to content

Commit 35d752f

Browse files
committed
Remove more OOM checks
1 parent 141eb34 commit 35d752f

File tree

2 files changed

+39
-75
lines changed

2 files changed

+39
-75
lines changed

ext/mysqlnd/mysqlnd_result.c

Lines changed: 28 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,8 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, initialize_result_set_rest)(MYSQLND_RE
9797
DBG_ENTER("mysqlnd_result_buffered_c::initialize_result_set_rest");
9898

9999
if (result->initialized_rows < row_count) {
100-
zend_uchar * initialized = ((MYSQLND_RES_BUFFERED_C *) result)->initialized;
101-
zval * current_row = mnd_emalloc(field_count * sizeof(zval));
102-
103-
if (!current_row) {
104-
DBG_RETURN(FAIL);
105-
}
100+
zend_uchar *initialized = ((MYSQLND_RES_BUFFERED_C *) result)->initialized;
101+
zval *current_row = mnd_emalloc(field_count * sizeof(zval));
106102

107103
for (row = 0; row < result->row_count; row++) {
108104
/* (row / 8) & the_bit_for_row*/
@@ -343,10 +339,6 @@ MYSQLND_METHOD(mysqlnd_res, read_result_metadata)(MYSQLND_RES * result, MYSQLND_
343339
}
344340

345341
result->meta = result->m.result_meta_init(result, result->field_count);
346-
if (!result->meta) {
347-
SET_OOM_ERROR(conn->error_info);
348-
DBG_RETURN(FAIL);
349-
}
350342

351343
/* 1. Read all fields metadata */
352344

@@ -704,33 +696,29 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(MYSQLND_RES * result, voi
704696
}
705697
{
706698
*row = mnd_malloc(field_count * sizeof(char *));
707-
if (*row) {
708-
MYSQLND_FIELD * field = meta->fields;
709-
size_t * lengths = result->unbuf->lengths;
699+
MYSQLND_FIELD * field = meta->fields;
700+
size_t * lengths = result->unbuf->lengths;
710701

711-
for (i = 0; i < field_count; i++, field++) {
712-
zval * data = &result->unbuf->last_row_data[i];
713-
const size_t len = (Z_TYPE_P(data) == IS_STRING)? Z_STRLEN_P(data) : 0;
702+
for (i = 0; i < field_count; i++, field++) {
703+
zval * data = &result->unbuf->last_row_data[i];
704+
const size_t len = (Z_TYPE_P(data) == IS_STRING)? Z_STRLEN_P(data) : 0;
714705

715706
/* BEGIN difference between normal normal fetch and _c */
716-
if (Z_TYPE_P(data) != IS_NULL) {
717-
convert_to_string(data);
718-
(*row)[i] = Z_STRVAL_P(data);
719-
} else {
720-
(*row)[i] = NULL;
721-
}
707+
if (Z_TYPE_P(data) != IS_NULL) {
708+
convert_to_string(data);
709+
(*row)[i] = Z_STRVAL_P(data);
710+
} else {
711+
(*row)[i] = NULL;
712+
}
722713
/* END difference between normal normal fetch and _c */
723714

724-
if (lengths) {
725-
lengths[i] = len;
726-
}
715+
if (lengths) {
716+
lengths[i] = len;
717+
}
727718

728-
if (field->max_length < len) {
729-
field->max_length = len;
730-
}
719+
if (field->max_length < len) {
720+
field->max_length = len;
731721
}
732-
} else {
733-
SET_OOM_ERROR(conn->error_info);
734722
}
735723
}
736724
}
@@ -930,9 +918,6 @@ MYSQLND_METHOD(mysqlnd_res, use_result)(MYSQLND_RES * const result, const zend_b
930918
}
931919

932920
result->unbuf = mysqlnd_result_unbuffered_init(result, result->field_count, ps);
933-
if (!result->unbuf) {
934-
goto oom;
935-
}
936921

937922
/*
938923
Will be freed in the mysqlnd_internal_free_result_contents() called
@@ -953,9 +938,6 @@ MYSQLND_METHOD(mysqlnd_res, use_result)(MYSQLND_RES * const result, const zend_b
953938
}
954939

955940
DBG_RETURN(result);
956-
oom:
957-
SET_OOM_ERROR(conn->error_info);
958-
DBG_RETURN(NULL);
959941
}
960942
/* }}} */
961943

@@ -1009,26 +991,21 @@ MYSQLND_METHOD(mysqlnd_result_buffered, fetch_row_c)(MYSQLND_RES * result, void
1009991
}
1010992

1011993
/* BEGIN difference between normal normal fetch and _c */
1012-
/* there is no conn handle in this function thus we can't set OOM in error_info */
1013994
*row = mnd_malloc(field_count * sizeof(char *));
1014-
if (*row) {
1015-
for (i = 0; i < field_count; ++i) {
1016-
zval * data = &current_row[i];
995+
for (i = 0; i < field_count; ++i) {
996+
zval * data = &current_row[i];
1017997

1018-
set->lengths[i] = (Z_TYPE_P(data) == IS_STRING)? Z_STRLEN_P(data) : 0;
998+
set->lengths[i] = (Z_TYPE_P(data) == IS_STRING)? Z_STRLEN_P(data) : 0;
1019999

1020-
if (Z_TYPE_P(data) != IS_NULL) {
1021-
convert_to_string(data);
1022-
(*row)[i] = Z_STRVAL_P(data);
1023-
} else {
1024-
(*row)[i] = NULL;
1025-
}
1000+
if (Z_TYPE_P(data) != IS_NULL) {
1001+
convert_to_string(data);
1002+
(*row)[i] = Z_STRVAL_P(data);
1003+
} else {
1004+
(*row)[i] = NULL;
10261005
}
1027-
set->data_cursor += field_count;
1028-
MYSQLND_INC_GLOBAL_STATISTIC(STAT_ROWS_FETCHED_FROM_CLIENT_NORMAL_BUF);
1029-
} else {
1030-
SET_OOM_ERROR(conn->error_info);
10311006
}
1007+
set->data_cursor += field_count;
1008+
MYSQLND_INC_GLOBAL_STATISTIC(STAT_ROWS_FETCHED_FROM_CLIENT_NORMAL_BUF);
10321009
/* END difference between normal normal fetch and _c */
10331010

10341011
*fetched_anything = *row? TRUE:FALSE;
@@ -1161,11 +1138,6 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void
11611138
unsigned int i;
11621139

11631140
current_row = mnd_emalloc(field_count * sizeof(zval));
1164-
if (!current_row) {
1165-
SET_OOM_ERROR(conn->error_info);
1166-
DBG_RETURN(FAIL);
1167-
}
1168-
11691141
rc = result->stored_data->m.row_decoder(&result->stored_data->row_buffers[set->current_row],
11701142
current_row,
11711143
field_count,
@@ -1321,11 +1293,6 @@ MYSQLND_METHOD(mysqlnd_res, store_result_fetch_data)(MYSQLND_CONN_DATA * const c
13211293
} else {
13221294
new_row_buffers = mnd_emalloc((size_t)(total_allocated_rows * sizeof(MYSQLND_ROW_BUFFER)));
13231295
}
1324-
if (!new_row_buffers) {
1325-
SET_OOM_ERROR(conn->error_info);
1326-
ret = FAIL;
1327-
goto free_end;
1328-
}
13291296
*row_buffers = new_row_buffers;
13301297
}
13311298
free_rows--;

ext/mysqlnd/mysqlnd_result_meta.c

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -289,20 +289,17 @@ mysqlnd_result_meta_init(MYSQLND_RES *result, unsigned int field_count)
289289
MYSQLND_RES_METADATA *ret;
290290
DBG_ENTER("mysqlnd_result_meta_init");
291291

292-
do {
293-
ret = result->memory_pool->get_chunk(result->memory_pool, alloc_size);
294-
memset(ret, 0, alloc_size);
295-
ret->m = & mysqlnd_mysqlnd_res_meta_methods;
296-
297-
ret->field_count = field_count;
298-
/* +1 is to have empty marker at the end */
299-
alloc_size = (field_count + 1) * sizeof(MYSQLND_FIELD);
300-
ret->fields = result->memory_pool->get_chunk(result->memory_pool, alloc_size);
301-
memset(ret->fields, 0, alloc_size);
302-
DBG_INF_FMT("meta=%p", ret);
303-
DBG_RETURN(ret);
304-
} while (0);
305-
DBG_RETURN(NULL);
292+
ret = result->memory_pool->get_chunk(result->memory_pool, alloc_size);
293+
memset(ret, 0, alloc_size);
294+
ret->m = & mysqlnd_mysqlnd_res_meta_methods;
295+
296+
ret->field_count = field_count;
297+
/* +1 is to have empty marker at the end */
298+
alloc_size = (field_count + 1) * sizeof(MYSQLND_FIELD);
299+
ret->fields = result->memory_pool->get_chunk(result->memory_pool, alloc_size);
300+
memset(ret->fields, 0, alloc_size);
301+
DBG_INF_FMT("meta=%p", ret);
302+
DBG_RETURN(ret);
306303
}
307304
/* }}} */
308305

0 commit comments

Comments
 (0)