[PATCH 1/3] windows.c: Fix possible assert when passing NULL to *open()

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


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

On Win32 subsurface_fopen() can reach an assert in windows.c:
utf8_to_utf16(), if NULL is passed for 'path'.

Let's return NULL/-1 for some of the *open() functions in there.

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

diff --git a/windows.c b/windows.c
index 9288af4..7c537f6 100644
--- a/windows.c
+++ b/windows.c
@@ -114,6 +114,8 @@ static wchar_t *utf8_to_utf16_fl(const char *utf8, char *file, int line)
 int subsurface_open(const char *path, int oflags, mode_t mode)
 {
 	int ret = -1;
+	if (!path)
+		return -1;
 	wchar_t *wpath = utf8_to_utf16(path);
 	if (wpath) {
 		ret = _wopen(wpath, oflags, mode);
@@ -126,6 +128,8 @@ int subsurface_open(const char *path, int oflags, mode_t mode)
 FILE *subsurface_fopen(const char *path, const char *mode)
 {
 	FILE *ret = NULL;
+	if (!path)
+		return ret;
 	wchar_t *wpath = utf8_to_utf16(path);
 	if (wpath) {
 		const int len = strlen(mode);
@@ -144,6 +148,8 @@ FILE *subsurface_fopen(const char *path, const char *mode)
 void *subsurface_opendir(const char *path)
 {
 	_WDIR *ret = NULL;
+	if (!path)
+		return ret;
 	wchar_t *wpath = utf8_to_utf16(path);
 	if (wpath) {
 		ret = _wopendir(wpath);
-- 
1.7.11.msysgit.0



More information about the subsurface mailing list