summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Stoeckmann <tobias@stoeckmann.org>2017-04-02 13:12:03 +0200
committerTobias Stoeckmann <tobias@stoeckmann.org>2017-04-02 13:12:03 +0200
commitdcd9735a236b6557b6254569acd9c297913d5f7b (patch)
tree7f11e24097caf9400da4206c24d1a393de223672
parentde76be7ab44cb49a75be0322a345e07771e6556d (diff)
Fixed out of boundary write on long lines.
The terminating nul character ('\0') could be written outside the boundary of the buffer which is used to read characters. If "sizeof(buffer)" characters are read, the resulting value must not be used as index, because that's an off by one. Read sizeof(buffer)-1 bytes instead. Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
-rw-r--r--slstatus.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/slstatus.c b/slstatus.c
index 90b4808..6deb68c 100644
--- a/slstatus.c
+++ b/slstatus.c
@@ -447,9 +447,9 @@ run_command(const char *cmd)
warn("Failed to get command output for %s", cmd);
return smprintf("%s", UNKNOWN_STR);
}
- fgets(buf, sizeof(buf), fp);
+ fgets(buf, sizeof(buf) - 1, fp);
pclose(fp);
- buf[sizeof(buf)] = '\0';
+ buf[sizeof(buf) - 1] = '\0';
if ((nlptr = strstr(buf, "\n")) != NULL) {
nlptr[0] = '\0';
@@ -473,7 +473,7 @@ swap_free(void)
return smprintf("%s", UNKNOWN_STR);
}
- if ((bytes_read = fread(buf, sizeof(char), sizeof(buf), fp)) == 0) {
+ if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) == 0) {
warn("swap_free: read error");
fclose(fp);
return smprintf("%s", UNKNOWN_STR);
@@ -510,7 +510,7 @@ swap_perc(void)
return smprintf("%s", UNKNOWN_STR);
}
- if ((bytes_read = fread(buf, sizeof(char), sizeof(buf), fp)) == 0) {
+ if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) == 0) {
warn("swap_perc: read error");
fclose(fp);
return smprintf("%s", UNKNOWN_STR);
@@ -551,7 +551,7 @@ swap_total(void)
warn("Failed to open file /proc/meminfo");
return smprintf("%s", UNKNOWN_STR);
}
- if ((bytes_read = fread(buf, sizeof(char), sizeof(buf), fp)) == 0) {
+ if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) == 0) {
warn("swap_total: read error");
fclose(fp);
return smprintf("%s", UNKNOWN_STR);
@@ -582,7 +582,7 @@ swap_used(void)
warn("Failed to open file /proc/meminfo");
return smprintf("%s", UNKNOWN_STR);
}
- if ((bytes_read = fread(buf, sizeof(char), sizeof(buf), fp)) == 0) {
+ if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) == 0) {
warn("swap_used: read error");
fclose(fp);
return smprintf("%s", UNKNOWN_STR);