Skip to content

Commit 99bb107

Browse files
committed
Use sNprintf to build libnames and check errors.
1 parent b78169e commit 99bb107

File tree

3 files changed

+27
-22
lines changed

3 files changed

+27
-22
lines changed

src/gpuarray_buffer_cuda.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ static int setup_lib(void) {
150150
if (res != GA_NO_ERROR) {
151151
/* Else, let's try to find a nvrtc corresponding to supported CUDA versions. */
152152
int versions[][2] = {{8, 0}, {7, 5}, {7, 0}};
153-
int versions_length = sizeof(versions) / (2 * sizeof(int));
153+
int versions_length = sizeof(versions) / sizeof(versions[0]);
154154
int i = 0;
155155
do {
156156
major = versions[i][0];

src/loaders/libcublas.c

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
#include <stdlib.h>
2-
#ifdef DEBUG
3-
/* For fprintf and stderr. */
4-
#include <stdio.h>
5-
#endif
1+
/* To be able to use snprintf with any compiler including MSVC2008. */
2+
#include <private_config.h>
63

74
#include "libcublas.h"
85
#include "dyn_load.h"
@@ -45,22 +42,27 @@ int load_libcublas(int major, int minor, error *e) {
4542

4643
#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
4744
{
48-
const char* libname_pattern = "cublas64_%d%d.dll";
4945
char libname[64];
50-
46+
int n;
5147
#ifdef DEBUG
5248
fprintf(stderr, "Loading cuBLAS %d.%d.\n", major, minor);
5349
#endif
54-
sprintf(libname, libname_pattern, major, minor);
55-
50+
n = snprintf(libname, 64, "cublas64_%d%d.dll", major, minor);
51+
if (n < 0 || n >= 64)
52+
return error_set(e, GA_SYS_ERROR, "cublas library name too long.");
5653
lib = ga_load_library(libname, e);
5754
}
5855
#else /* Unix */
5956
#ifdef __APPLE__
6057
{
61-
const char* libname_pattern = "/Developer/NVIDIA/CUDA-%d.%d/lib/libcublas.dylib";
6258
char libname[128];
63-
sprintf(libname, libname_pattern, major, minor);
59+
int n;
60+
#ifdef DEBUG
61+
fprintf(stderr, "Loading cuBLAS %d.%d.\n", major, minor);
62+
#endif
63+
n = snprintf(libname, 128, "/Developer/NVIDIA/CUDA-%d.%d/lib/libcublas.dylib", major, minor);
64+
if (n < 0 || n >= 128)
65+
return error_set(e, GA_SYS_ERROR, "cublas library path too long.");
6466
lib = ga_load_library(libname, e);
6567
}
6668
#else

src/loaders/libnvrtc.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
#include <stdlib.h>
2-
#ifdef DEBUG
3-
/* For fprintf and stderr. */
4-
#include <stdio.h>
5-
#endif
1+
/* To be able to use snprintf with any compiler including MSVC2008. */
2+
#include <private_config.h>
63

74
#include "libcuda.h"
85
#include "libnvrtc.h"
@@ -31,23 +28,29 @@ int load_libnvrtc(int major, int minor, error *e) {
3128

3229
#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
3330
{
34-
const char* libname_pattern = "nvrtc64_%d%d.dll";
3531
char libname[64];
36-
32+
int n;
3733
#ifdef DEBUG
3834
fprintf(stderr, "Loading nvrtc %d.%d.\n", major, minor);
3935
#endif
40-
sprintf(libname, libname_pattern, major, minor);
36+
n = snprintf(libname, 64, "nvrtc64_%d%d.dll", major, minor);
37+
if (n < 0 || n >= 64)
38+
return error_set(e, GA_SYS_ERROR, "nvrtc library name too long.");
4139

4240
lib = ga_load_library(libname, e);
4341
}
4442
#else /* Unix */
4543
#ifdef __APPLE__
4644
{
4745
/* Try the usual fullpath first */
48-
const char* libname_pattern = "/Developer/NVIDIA/CUDA-%d.%d/lib/libnvrtc.dylib";
4946
char libname[128];
50-
sprintf(libname, libname_pattern, major, minor);
47+
int n;
48+
#ifdef DEBUG
49+
fprintf(stderr, "Loading nvrtc %d.%d.\n", major, minor);
50+
#endif
51+
n = snprintf(libname, 128, "/Developer/NVIDIA/CUDA-%d.%d/lib/libnvrtc.dylib", major, minor);
52+
if (n < 0 || n >= 128)
53+
return error_set(e, GA_SYS_ERROR, "nvrtc library path too long.");
5154
lib = ga_load_library(libname, e);
5255
}
5356
#else

0 commit comments

Comments
 (0)