• R/O
  • HTTP
  • SSH
  • HTTPS

lha: 提交


Commit MetaInfo

修訂2f6c23df5518b6edc2f61161b1853e3817643f58 (tree)
時間2016-01-23 12:38:32
作者Koji Arai <jca02266@gmai...>
CommiterKoji Arai

Log Message

Fix a BUG skip size become negative in the skip_bytes() function, when the extended header size is too short

Change Summary

差異

--- a/src/header.c
+++ b/src/header.c
@@ -37,7 +37,7 @@ static char *start_ptr;
3737 #else
3838 #define setup_get(PTR) (get_ptr = (PTR))
3939 #define get_byte() GET_BYTE()
40-#define skip_bytes(len) (get_ptr += (len))
40+#define skip_bytes(len) _skip_bytes(len)
4141 #endif
4242 #define put_ptr get_ptr
4343 #define setup_put(PTR) (put_ptr = (PTR))
@@ -68,6 +68,16 @@ calc_sum(p, len)
6868 return sum & 0xff;
6969 }
7070
71+static void
72+_skip_bytes(len)
73+{
74+ if (len < 0) {
75+ error("Invalid header: %d", len);
76+ exit(1);
77+ }
78+ get_ptr += len;
79+}
80+
7181 #if DUMP_HEADER
7282 static int
7383 dump_get_byte()
@@ -93,12 +103,16 @@ dump_skip_bytes(len)
93103 if (len == 0) return;
94104 if (verbose_listing && verbose > 1) {
95105 printf("%02d %2d: ", get_ptr - start_ptr, len);
106+ if (len < 0) {
107+ error("Invalid header: %d", len);
108+ exit(1);
109+ }
96110 while (len--)
97111 printf("0x%02x ", GET_BYTE());
98112 printf("... ignored\n");
99113 }
100114 else
101- get_ptr += len;
115+ _skip_bytes(len);
102116 }
103117 #endif
104118
Show on old repository browser