]> granicus.if.org Git - sysstat/commitdiff
tapestat: Check fscanf() return value
authorSebastien GODARD <sysstat@users.noreply.github.com>
Fri, 28 Aug 2015 09:35:57 +0000 (11:35 +0200)
committerSebastien GODARD <sysstat@users.noreply.github.com>
Fri, 28 Aug 2015 09:35:57 +0000 (11:35 +0200)
Fix defects 107300, 107299 and 107298 found by Coverity scan.

Signed-off-by: Shane M. SEYMOUR <shane.seymour@hp.com>
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
tapestat.c
tapestat.h

index e6505d91edde4a192c46f727a5dfbece8f7ebb78..4f6e8cfc02c3680d40d9b7b783109afa109d4b34 100644 (file)
@@ -394,7 +394,9 @@ void tape_calc_one_stats(struct calc_stats *stats, int i)
                if (fp == NULL) {
                        duration = 0;
                } else {
-                       fscanf(fp, "%lf", &temp);
+                       if (fscanf(fp, "%lf", &temp) != 1) {
+                               temp = 0;
+                       }
                        duration = (uint64_t) (temp * 1000);
                        fclose(fp);
                }
index 97a507b037b46c9d77ea368e6aa800afe5262493..120d5c7e42dd30c579970a1dfb9a17f5fe32845d 100644 (file)
 #define SYSFS_CLASS_TAPE_DIR "/sys/class/scsi_tape"
 #define TAPE_STAT_PATH "/sys/class/scsi_tape/st%i/stats/"
 
-#define TAPE_STAT_FILE_VAL(A, B)                               \
-       snprintf(filename, MAXPATHLEN, A, i);                   \
-       if ((fp = fopen(filename, "r")) != NULL) {              \
-               fscanf(fp, "%"PRId64, &tape_new_stats[i].B);    \
-               fclose(fp);                                     \
-       } else {                                                \
-               tape_new_stats[i].valid = TAPE_STATS_INVALID;   \
-               continue;                                       \
+#define TAPE_STAT_FILE_VAL(A, B)                                       \
+       snprintf(filename, MAXPATHLEN, A, i);                           \
+       if ((fp = fopen(filename, "r")) != NULL) {                      \
+               if (fscanf(fp, "%"PRId64, &tape_new_stats[i].B) != 1) { \
+                       tape_new_stats[i].valid = TAPE_STATS_INVALID;   \
+               }                                                       \
+               fclose(fp);                                             \
+       } else {                                                        \
+               tape_new_stats[i].valid = TAPE_STATS_INVALID;           \
+               continue;                                               \
        }