[Beignet] [PATCH 05/12] file name length overflow check.
xionghu.luo at intel.com
xionghu.luo at intel.com
Thu May 5 16:11:48 UTC 2016
From: Luo Xionghu <xionghu.luo at intel.com>
Signed-off-by: Luo Xionghu <xionghu.luo at intel.com>
---
backend/src/backend/gen_insn_selection_output.cpp | 8 +++++++-
src/cl_program.c | 12 +++++++++---
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/backend/src/backend/gen_insn_selection_output.cpp b/backend/src/backend/gen_insn_selection_output.cpp
index 1861637..ed26650 100644
--- a/backend/src/backend/gen_insn_selection_output.cpp
+++ b/backend/src/backend/gen_insn_selection_output.cpp
@@ -95,13 +95,14 @@ namespace gbe
assert(!"should not reach here");
}
+#define OP_NAME_LENGTH 512
void outputSelectionIR(GenContext &ctx, Selection* sel)
{
cout << "SELECTION IR begin:" << endl;
cout << "WARNING: not completed yet, welcome for the FIX!" << endl;
for (SelectionBlock &block : *sel->blockList) {
for (SelectionInstruction &insn : block.insnList) {
- char opname[512];
+ char opname[OP_NAME_LENGTH];
if (insn.isLabel()) {
cout << " L" << insn.index << ":" << endl;
continue;
@@ -137,6 +138,11 @@ namespace gbe
}
int n = strlen(opname);
+ if(n >= OP_NAME_LENGTH - 20) {
+ cout << "opname too long: " << opname << endl;
+ return;
+ }
+
sprintf(&opname[n], "(%d)", insn.state.execWidth);
cout << " " << left << setw(20) << opname;
diff --git a/src/cl_program.c b/src/cl_program.c
index b4656ce..51d6318 100644
--- a/src/cl_program.c
+++ b/src/cl_program.c
@@ -745,6 +745,7 @@ error:
return p;
}
+#define FILE_PATH_LENGTH 1024
LOCAL cl_int
cl_program_compile(cl_program p,
cl_uint num_input_headers,
@@ -795,11 +796,15 @@ cl_program_compile(cl_program p,
for (i = 0; i < num_input_headers; i++) {
if(header_include_names[i] == NULL || input_headers[i] == NULL)
continue;
-
- char temp_path[255]="";
- strncpy(temp_path, temp_header_path, strlen(temp_header_path));
+ char temp_path[FILE_PATH_LENGTH]="";
+ strncat(temp_path, temp_header_path, strlen(temp_header_path));
strncat(temp_path, "/", 1);
strncat(temp_path, header_include_names[i], strlen(header_include_names[i]));
+ if(strlen(temp_path) >= FILE_PATH_LENGTH - 1 ) {
+ err = CL_COMPILE_PROGRAM_FAILURE;
+ goto error;
+ }
+ temp_path[strlen(temp_path)+1] = '\0';
char* dirc = strdup(temp_path);
char* dir = dirname(dirc);
mkdir(dir, 0755);
@@ -943,6 +948,7 @@ cl_program_get_kernel_names(cl_program p, size_t size, char *names, size_t *size
len = strlen(ker_name);
if(names) {
strncpy(names, cl_kernel_get_name(p->ker[0]), size - 1);
+ names[size] = '\0';
if(size < len - 1) {
if(size_ret) *size_ret = size;
return;
--
2.1.4
More information about the Beignet
mailing list