Remove redundant NULL checks in mbstring

Whoever originally wrote mbstring seems to have a deathly fear of NULL
pointers lurking behind every corner. A common pattern is that one
function will check if a pointer is NULL, then pass it to another
function, which will again check if it is NULL, then pass to yet another
function, which will yet again check if it is NULL... it's NULL checks
all the way down.

Remove all the NULL checks in places where pointers could not possibly
be NULL.
This commit is contained in:
Alex Dowad 2021-07-30 16:19:53 +02:00
parent 626f0fec54
commit a312620607
3 changed files with 34 additions and 99 deletions

View file

@ -149,54 +149,34 @@ mbfl_buffer_converter_new(
return convd;
}
void
mbfl_buffer_converter_delete(mbfl_buffer_converter *convd)
void mbfl_buffer_converter_delete(mbfl_buffer_converter *convd)
{
if (convd != NULL) {
if (convd->filter1) {
mbfl_convert_filter_delete(convd->filter1);
}
if (convd->filter2) {
mbfl_convert_filter_delete(convd->filter2);
}
mbfl_memory_device_clear(&convd->device);
efree((void*)convd);
}
}
int
mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode)
void mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode)
{
if (convd != NULL) {
if (convd->filter2 != NULL) {
if (convd->filter2) {
convd->filter2->illegal_mode = mode;
} else if (convd->filter1 != NULL) {
} else {
convd->filter1->illegal_mode = mode;
} else {
return 0;
}
}
return 1;
}
int
mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar)
void mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar)
{
if (convd != NULL) {
if (convd->filter2 != NULL) {
if (convd->filter2) {
convd->filter2->illegal_substchar = substchar;
} else if (convd->filter1 != NULL) {
convd->filter1->illegal_substchar = substchar;
} else {
return 0;
convd->filter1->illegal_substchar = substchar;
}
}
return 1;
}
size_t mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string)
{
size_t n;
@ -223,59 +203,30 @@ size_t mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *str
return p - string->val;
}
int
mbfl_buffer_converter_flush(mbfl_buffer_converter *convd)
void mbfl_buffer_converter_flush(mbfl_buffer_converter *convd)
{
if (convd == NULL) {
return -1;
}
if (convd->filter1 != NULL) {
mbfl_convert_filter_flush(convd->filter1);
}
return 0;
}
mbfl_string *
mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result)
mbfl_string* mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result)
{
if (convd == NULL || result == NULL) {
return NULL;
}
result->encoding = convd->to;
return mbfl_memory_device_result(&convd->device, result);
}
mbfl_string *
mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string,
mbfl_string *result)
mbfl_string* mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string, mbfl_string *result)
{
if (convd == NULL || string == NULL || result == NULL) {
return NULL;
}
mbfl_buffer_converter_feed(convd, string);
if (convd->filter1 != NULL) {
mbfl_convert_filter_flush(convd->filter1);
}
result->encoding = convd->to;
return mbfl_memory_device_result(&convd->device, result);
}
size_t mbfl_buffer_illegalchars(mbfl_buffer_converter *convd)
{
size_t num_illegalchars = 0;
size_t num_illegalchars = convd->filter1->num_illegalchar;
if (convd == NULL) {
return 0;
}
if (convd->filter1 != NULL) {
num_illegalchars += convd->filter1->num_illegalchar;
}
if (convd->filter2 != NULL) {
if (convd->filter2) {
num_illegalchars += convd->filter2->num_illegalchar;
}
@ -399,16 +350,10 @@ mbfl_convert_encoding(
size_t n;
unsigned char *p;
mbfl_memory_device device;
mbfl_convert_filter *filter1;
mbfl_convert_filter *filter2;
mbfl_convert_filter *filter1 = NULL;
mbfl_convert_filter *filter2 = NULL;
/* initialize */
if (toenc == NULL || string == NULL || result == NULL) {
return NULL;
}
filter1 = NULL;
filter2 = NULL;
if (mbfl_convert_filter_get_vtbl(string->encoding, toenc) != NULL) {
filter1 = mbfl_convert_filter_new(string->encoding, toenc, mbfl_memory_device_output, 0, &device);
} else {
@ -1385,9 +1330,6 @@ mbfl_strimwidth(
size_t n, mkwidth;
unsigned char *p;
if (string == NULL || result == NULL) {
return NULL;
}
mbfl_string_init(result);
result->encoding = string->encoding;
mbfl_memory_device_init(&pc.device, MIN(string->len, width), 0);
@ -2505,9 +2447,6 @@ mbfl_html_numeric_entity(
size_t n;
unsigned char *p;
if (string == NULL || result == NULL) {
return NULL;
}
mbfl_string_init(result);
result->encoding = string->encoding;
mbfl_memory_device_init(&device, string->len, 0);

View file

@ -141,10 +141,10 @@ struct _mbfl_buffer_converter {
MBFLAPI extern mbfl_buffer_converter * mbfl_buffer_converter_new(const mbfl_encoding *from, const mbfl_encoding *to, size_t buf_initsz);
MBFLAPI extern void mbfl_buffer_converter_delete(mbfl_buffer_converter *convd);
MBFLAPI extern int mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode);
MBFLAPI extern int mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar);
MBFLAPI extern void mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode);
MBFLAPI extern void mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar);
MBFLAPI extern size_t mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string);
MBFLAPI extern int mbfl_buffer_converter_flush(mbfl_buffer_converter *convd);
MBFLAPI extern void mbfl_buffer_converter_flush(mbfl_buffer_converter *convd);
MBFLAPI extern mbfl_string * mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result);
MBFLAPI extern mbfl_string * mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string, mbfl_string *result);
MBFLAPI extern size_t mbfl_buffer_illegalchars(mbfl_buffer_converter *convd);

View file

@ -363,7 +363,7 @@ MBSTRING_API char *php_unicode_convert_case(
{
struct convert_case_data data;
mbfl_convert_filter *from_wchar, *to_wchar;
mbfl_string result, *result_ptr;
mbfl_string result;
mbfl_memory_device device;
mbfl_memory_device_init(&device, srclen + 1, 0);
@ -410,14 +410,10 @@ MBSTRING_API char *php_unicode_convert_case(
mbfl_convert_filter_flush(to_wchar);
mbfl_convert_filter_flush(from_wchar);
result_ptr = mbfl_memory_device_result(&device, &result);
mbfl_memory_device_result(&device, &result);
mbfl_convert_filter_delete(to_wchar);
mbfl_convert_filter_delete(from_wchar);
if (!result_ptr) {
return NULL;
}
*ret_len = result.len;
return (char *) result.val;
}