summaryrefslogtreecommitdiffstats
path: root/src/fw.c
diff options
context:
space:
mode:
authorGravatar Erik Hovland 2008-09-30 14:05:32 -0700
committerGravatar Dan Dennedy 2008-10-28 22:52:41 -0700
commit531b0787f1ff297f3a932f2bbe768416a8cf8cab (patch)
treeff7d49a36fa2dd2979b5a5333d9d897a97e376a8 /src/fw.c
parentMakes sure to check any return values (diff)
Makes extra sure strings are not overrun.
When using strncpy with the exact size of the destination string the string may end up lacking null termination because the source string is bigger then the destination. Signed-off-by: Erik Hovland <erik@hovland.org> Signed-off-by: Dan Dennedy <dan@dennedy.org>
Diffstat (limited to '')
-rw-r--r--src/fw.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/fw.c b/src/fw.c
index a4bbf3c..4ef084d 100644
--- a/src/fw.c
+++ b/src/fw.c
@@ -125,7 +125,7 @@ scan_devices(fw_handle_t handle)
char filename[32];
struct fw_cdev_get_info get_info;
struct fw_cdev_event_bus_reset reset;
- int fd, err, i;
+ int fd, err, i, fname_str_sz;
struct port *ports;
ports = handle->ports;
@@ -162,8 +162,9 @@ scan_devices(fw_handle_t handle)
continue;
if (i < MAX_PORTS && reset.node_id == reset.local_node_id) {
- strncpy(ports[i].device_file, filename,
- sizeof ports[i].device_file);
+ fname_str_sz = sizeof(ports[i].device_file) - 1;
+ strncpy(ports[i].device_file, filename, fname_str_sz);
+ ports[i].device_file[fname_str_sz] = '\0';
ports[i].node_count = (reset.root_node_id & 0x3f) + 1;
ports[i].card = get_info.card;
i++;
@@ -315,7 +316,7 @@ handle_inotify(raw1394handle_t handle, struct epoll_closure *ec,
struct fw_cdev_get_info info;
struct fw_cdev_event_bus_reset reset;
struct epoll_event ep;
- int i, len, fd, phy_id;
+ int i, len, fd, phy_id, fname_str_sz;
event = (struct inotify_event *) fwhandle->buffer;
len = read(fwhandle->inotify_fd, event, BUFFER_SIZE);
@@ -365,8 +366,9 @@ handle_inotify(raw1394handle_t handle, struct epoll_closure *ec,
fwhandle->devices[i].node_id = reset.node_id;
fwhandle->devices[i].generation = reset.generation;
fwhandle->devices[i].fd = fd;
- strncpy(fwhandle->devices[i].filename, filename,
- sizeof fwhandle->devices[i].filename);
+ fname_str_sz = sizeof(fwhandle->devices[i].filename) - 1;
+ strncpy(fwhandle->devices[i].filename, filename, fname_str_sz);
+ fwhandle->devices[i].filename[fname_str_sz] = '\0';
fwhandle->devices[i].closure.func = handle_device_event;
ep.events = EPOLLIN;
ep.data.ptr = &fwhandle->devices[i].closure;
@@ -540,15 +542,17 @@ int fw_get_port_info(fw_handle_t handle,
struct raw1394_portinfo *pinf,
int maxports)
{
- int i;
+ int i, port_name_sz;
if (maxports >= handle->port_count)
maxports = handle->port_count;
for (i = 0; i < maxports; i++) {
pinf[i].nodes = handle->ports[i].node_count;
+ port_name_sz = sizeof(pinf[i].name) - 1;
strncpy(pinf[i].name, handle->ports[i].device_file,
- sizeof pinf[i].name);
+ port_name_sz);
+ pinf[i].name[port_name_sz] = '\0';
}
return handle->port_count;
@@ -562,7 +566,7 @@ int fw_set_port(fw_handle_t handle, int port)
struct dirent *de;
char filename[32];
DIR *dir;
- int i, fd, phy_id;
+ int i, fd, phy_id, fname_str_sz;
if (port >= handle->port_count) {
errno = EINVAL;
@@ -608,8 +612,9 @@ int fw_set_port(fw_handle_t handle, int port)
handle->devices[i].node_id = reset.node_id;
handle->devices[i].generation = reset.generation;
handle->devices[i].fd = fd;
- strncpy(handle->devices[i].filename, filename,
- sizeof handle->devices[i].filename);
+ fname_str_sz = sizeof(handle->devices[i].filename) -1;
+ strncpy(handle->devices[i].filename, filename, fname_str_sz);
+ handle->devices[i].filename[fname_str_sz] = '\0';
handle->devices[i].closure.func = handle_device_event;
memset(&ep, 0, sizeof(ep));
@@ -625,8 +630,9 @@ int fw_set_port(fw_handle_t handle, int port)
if (reset.node_id == reset.local_node_id) {
memcpy(&handle->reset, &reset, sizeof handle->reset);
handle->local_fd = fd;
- strncpy(handle->local_filename, filename,
- sizeof handle->local_filename);
+ fname_str_sz = sizeof(handle->local_filename) -1;
+ strncpy(handle->local_filename, filename, fname_str_sz);
+ handle->local_filename[fname_str_sz] = '\0';
}
i++;
om/avatar/5583ee5cd9fc9109043328f4e0fdf7ae?s=13&d=retro' width='13' height='13' alt='Gravatar' /> John Cowan 1-5/+5 2021-07-26update preview linkGravatar John Cowan 1-1/+1 2021-07-26MN-W reviewGravatar John Cowan 1-6/+6 2021-07-26paired mutatorsGravatar John Cowan 1-43/+68 2021-07-25exceptionsGravatar John Cowan 1-1/+15 2021-07-25new exampleGravatar John Cowan 1-1/+4 2021-07-25updatesGravatar John Cowan 1-2/+4 2021-07-24dtd always first argumentGravatar John Cowan 1-9/+9 2021-07-23DTO to DTDGravatar John Cowan 1-55/+52 2021-07-22typoGravatar John Cowan 1-1/+1 2021-07-22switching to explicit dtosGravatar John Cowan 1-88/+102 2021-07-22errorsGravatar John Cowan 1-1/+4 2021-07-22more MN-W reviewGravatar John Cowan 1-5/+5 2021-07-20update preview linkGravatar John Cowan 1-1/+1 2021-07-20MN-W reviewGravatar John Cowan 1-6/+6 2021-07-18Fix typo.Gravatar Arthur A. Gleckler 2-4/+4 2021-07-18Add <p> around abstract.Gravatar Arthur A. Gleckler 1-2/+2 2021-07-18Publish first draft.draft-1Gravatar Arthur A. Gleckler 3-0/+114 2021-07-18Ignore trailing whitespace.Gravatar Arthur A. Gleckler 11-129/+129 2021-07-18Ignore "Dictionaries.log".Gravatar Arthur A. Gleckler 1-1/+2 2021-07-18Fix errors reported by W3C HTML Validator.Gravatar Arthur A. Gleckler 1-27/+27 2021-07-18Eliminate unnecessary redirect by using TLS/SSL.Gravatar Arthur A. Gleckler 1-1/+1