Sophie

Sophie

distrib > Mandriva > 2010.2 > i586 > media > contrib-release-src > by-pkgid > 45cd55a5712bc0faaad6c706877519ea > files > 2

moblock-0.8-20mdv2008.1.src.rpm

--- moblock/MoBlock.c.orig	2007-05-22 10:09:24.000000000 +0200
+++ moblock/MoBlock.c	2007-05-22 10:57:41.000000000 +0200
@@ -220,10 +220,12 @@
 void loadlist_pg2(char *filename)		// experimental, no check for list sanity
 {
     FILE *fp;
-    int i,retval,ntot=0;
+    int i,retval=0,ntot=0;
     char name[100],ipmin[16];			// hope we don't have a list with longer names...
     uint32_t start_ip, end_ip;
     struct in_addr startaddr,endaddr;
+    int c;
+    size_t s;
 
     fp=fopen(filename,"r");
     if ( fp == NULL ) {
@@ -231,12 +233,63 @@
         exit(-1);
     }
 
-    fgetc(fp);					// skip first 4 bytes, don't know what they are
-    fgetc(fp);
-    fgetc(fp);
-    retval=fgetc(fp);
+    c=fgetc(fp);					// skip first 4 bytes, don't know what they are
+    if ( c != 0xff ) {
+        fprintf(logfile,"Byte 1: 0x%x != 0xff, aborting...\n", c);
+        fclose(fp);
+        exit(-1);
+    }
+
+    c=fgetc(fp);
+    if ( c != 0xff ) {
+        fprintf(logfile,"Byte 2: 0x%x != 0xff, aborting...\n", c);
+        fclose(fp);
+        exit(-1);
+    }
+
+    c=fgetc(fp);
+    if ( c != 0xff ) {
+        fprintf(logfile,"Byte 3: 0x%x != 0xff, aborting...\n", c);
+        fclose(fp);
+        exit(-1);
+    }
+
+    c=fgetc(fp);
+    if ( c != 0xff ) {
+        fprintf(logfile,"Byte 4: 0x%x != 0xff, aborting...\n", c);
+        fclose(fp);
+        exit(-1);
+    }
+
+    c=fgetc(fp);
+    if ( c != 'P' ) {
+        fprintf(logfile,"Byte 5: %c != P, aborting...\n", c);
+        fclose(fp);
+        exit(-1);
+    }
+
+    c=fgetc(fp);
+    if ( c != '2' ) {
+        fprintf(logfile,"Byte 6: %c != 2, aborting...\n", c);
+        fclose(fp);
+        exit(-1);
+    }
+
+    c=fgetc(fp);
+    if ( c != 'B' ) {
+        fprintf(logfile,"Byte 7: %c != B, aborting...\n", c);
+        fclose(fp);
+        exit(-1);
+    }
+
+    c=fgetc(fp);
+    if ( c != 0x02 ) {
+        fprintf(logfile,"Byte 8: version: %d != 2, aborting...\n", c);
+        fclose(fp);
+        exit(-1);
+    }
 
-    while ( retval != EOF ) {
+    do {
         i=0;
         do {
             name[i]=fgetc(fp);
@@ -244,8 +297,18 @@
         } while ( name[i-1] != 0x00 && name[i-1] != EOF);
         if ( name[i-1] != EOF ) {
             name[i-1]='\0';
-            fread(&start_ip,4,1,fp);
-            fread(&end_ip,4,1,fp);
+            s=fread(&start_ip,4,1,fp);
+            if ( s != 1 ) {
+                fprintf(logfile,"Failed to read start IP: %d != 1, aborting...\n", (int)s);
+                fclose(fp);
+                exit(-1);
+            }
+            s=fread(&end_ip,4,1,fp);
+            if ( s != 1 ) {
+                fprintf(logfile,"Failed to read end IP: %d != 1, aborting...\n", (int)s);
+                fclose(fp);
+                exit(-1);
+            }
             startaddr.s_addr=start_ip;
             endaddr.s_addr=end_ip;
             strcpy(ipmin,inet_ntoa(startaddr));
@@ -255,7 +318,7 @@
         else {
             retval=EOF;
         }
-    }
+    } while ( retval != EOF );
     fclose(fp);
     fprintf(logfile,"Ranges loaded: %d\n",ntot);
 	printf("* Ranges loaded: %d\n",ntot);