fix unsigned arithmetic bug in previous change
diff --git a/ChangeLog b/ChangeLog
index 55ec542..cd0c9e2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-24 John Hughes <john@calva.com>
+
+ * stream.h, net.h: Avoid possible infinite loop caused by
+ unsigned arithmetic in preceeding change.
+
2002-05-23 John Hughes <john@calva.com>
* acconfig.h: Add HAVE_OPTHDR and HAVE_T_OPTHDR defines.
diff --git a/net.c b/net.c
index 3465980..5ab0d67 100644
--- a/net.c
+++ b/net.c
@@ -1436,7 +1436,7 @@
int c = 0;
struct opthdr hdr;
- while (len >= sizeof hdr) {
+ while (len >= (int) sizeof hdr) {
if (umove(tcp, addr, &hdr) < 0) break;
if (c++) {
tprintf (", ");
@@ -1448,8 +1448,10 @@
addr += sizeof hdr;
len -= sizeof hdr;
printsockopt (tcp, hdr.level, hdr.name, addr, hdr.len);
- addr += hdr.len;
- len -= hdr.len;
+ if (hdr.len > 0) {
+ addr += hdr.len;
+ len -= hdr.len;
+ }
tprintf ("}");
}
if (len > 0) {
diff --git a/stream.c b/stream.c
index a8ea11e..42bfcc8 100644
--- a/stream.c
+++ b/stream.c
@@ -505,7 +505,7 @@
int c = 0;
struct t_opthdr hdr;
- while (len >= sizeof hdr) {
+ while (len >= (int) sizeof hdr) {
if (umove(tcp, addr, &hdr) < 0) break;
if (c++) {
tprintf (", ");