[PATCH 2/3] libdivecomputer.c: Try not to pass NULL to fopen()

Lubomir I. Ivanov neolit123 at gmail.com
Tue Jan 7 06:41:20 UTC 2014


From: "Lubomir I. Ivanov" <neolit123 at gmail.com>

C99 7.1.4, says nothing about passing NULL to fopen(),
which means that it isn't portable and there are no guaranties
that the return will be a NULL pointer or that that a library
implementation will not assert or SYSSEGV in the middle of the
fopen() branch.

libdivecomputer.c's 'dumpfile_name' and 'logfile_name' could
cause problems in that regard.

A possible fix for #411

Signed-off-by: Lubomir I. Ivanov <neolit123 at gmail.com>
---
 libdivecomputer.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libdivecomputer.c b/libdivecomputer.c
index 105a081..78d3808 100644
--- a/libdivecomputer.c
+++ b/libdivecomputer.c
@@ -676,7 +676,7 @@ static const char *do_device_import(device_data_t *data)
 		dc_buffer_t *buffer = dc_buffer_new (0);
 
 		rc = dc_device_dump (device, buffer);
-		if (rc == DC_STATUS_SUCCESS) {
+		if (rc == DC_STATUS_SUCCESS && dumpfile_name) {
 			FILE* fp = subsurface_fopen(dumpfile_name, "wb");
 			if (fp != NULL) {
 				fwrite (dc_buffer_get_data (buffer), 1, dc_buffer_get_size (buffer), fp);
@@ -721,7 +721,7 @@ const char *do_libdivecomputer_import(device_data_t *data)
 	data->device = NULL;
 	data->context = NULL;
 
-	if (data->libdc_log)
+	if (data->libdc_log && logfile_name)
 		fp = subsurface_fopen(logfile_name, "w");
 
 	rc = dc_context_new(&data->context);
-- 
1.7.11.msysgit.0



More information about the subsurface mailing list