<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif;">
<div>Bill. </div>
<div><br>
</div>
<div>Thanks for the updates on this. We will bug this too.</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Costas.</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<span style="font-weight:bold">From: </span>Bill Parker <<a href="mailto:wp02855@...8...">wp02855@...8...</a>><br>
<span style="font-weight:bold">Date: </span>Wednesday, March 12, 2014 at 12:32 PM<br>
<span style="font-weight:bold">To: </span>"<a href="mailto:snort-devel@lists.sourceforge.net">snort-devel@lists.sourceforge.net</a>" <<a href="mailto:snort-devel@lists.sourceforge.net">snort-devel@...7...rceforge.net</a>><br>
<span style="font-weight:bold">Subject: </span>[Snort-devel] [snort-devel] Patches to add error checking and replace legacy library calls in 2.9.7.0-alpha<br>
</div>
<div><br>
</div>
<div>
<div>
<div dir="ltr">
<div>Hi All,</div>
<div><br>
</div>
<div>   In reviewing code in Snort-2.9.7.0-alpha, I found instances</div>
<div>of the legacy library call 'index()' which I have replaced with</div>
<div>the more up to date library call 'strchr()' in directory</div>
<div>/snort-2.9.7.0-alpha/tools/u2streamer/', file 'SpoolFileIterator.c'</div>
<div><br>
</div>
<div>I also found a call to stat() and calls to write() which did not</div>
<div>check for a return value of < 0, indicating failure (according to</div>
<div>XXX comments in this file, it says we may want to check for errors)</div>
<div>so this patch does that.</div>
<div><br>
</div>
<div>The patch file is below:</div>
<div><br>
</div>
<div>--- SpoolFileIterator.c.orig    2014-03-11 18:34:12.895026389 -0700</div>
<div>+++ SpoolFileIterator.c 2014-03-11 19:25:49.640606828 -0700</div>
<div>@@ -175,11 +175,11 @@</div>
<div>     }</div>
<div> </div>
<div>     /* Remove trailing newline */</div>
<div>-    if((s_position = index(buffer, '\n')))</div>
<div>+    if((s_position = strchr(buffer, '\n')))</div>
<div>         *s_position = '\0';</div>
<div> </div>
<div>     /* Parse the position */</div>
<div>-    if(!(s_position = index(buffer, ',')))</div>
<div>+    if(!(s_position = strchr(buffer, ',')))</div>
<div>     {</div>
<div>         fprintf(stderr, "Syntax error processing bookmark data '%s'\n",</div>
<div>                 buffer);</div>
<div>@@ -228,6 +228,7 @@</div>
<div>     char buffer[256];</div>
<div>     if(!iterator || !iterator->bookmark_file)</div>
<div>         return SF_EINVAL;</div>
<div>+    int offset;</div>
<div> </div>
<div>     if(iterator->bookmark_fd == -1)</div>
<div>     {</div>
<div>@@ -245,8 +246,22 @@</div>
<div>     memset(buffer, 256, ' ');</div>
<div>     snprintf(buffer, 255, "%u, %u\n", timestamp, position);</div>
<div>     /* Set back to the beginning of the file */</div>
<div>-    lseek(iterator->bookmark_fd, 0, SEEK_SET);</div>
<div>-    write(iterator->bookmark_fd, buffer, 256);</div>
<div>+    offset = 0;</div>
<div>+    offset = lseek(iterator->bookmark_fd, 0, SEEK_SET);</div>
<div>+    if (offset == -1)</div>
<div>+    {</div>
<div>+       fprintf(stderr, "Unable to seek file '%s': %s\n",</div>
<div>+               iterator->bookmark_file, strerror(errno));</div>
<div>+       return -1;</div>
<div>+    }</div>
<div>+    offset = 0;</div>
<div>+    offset = write(iterator->bookmark_fd, buffer, 256);</div>
<div>+    if (offset == -1)</div>
<div>+    {</div>
<div>+       fprintf(stderr, "Unable to write file '%s': %s\n",</div>
<div>+               iterator->bookmark_file, strerror(errno));</div>
<div>+       return -1;</div>
<div>+    }</div>
<div> </div>
<div>     /* XXX Block signals here */</div>
<div>     /* XXX We may also want to check for errors */</div>
<div>@@ -292,7 +307,12 @@</div>
<div>                     return SF_ENOENT;</div>
<div>                 }</div>
<div> </div>
<div>-                stat(iterator->filepath, &buf);</div>
<div>+                rval = stat(iterator->filepath, &buf);</div>
<div>+               if (rval < 0)</div>
<div>+               {</div>
<div>+                   fprintf(stderr, "Unable to get file status: %s\n",</div>
<div>+                           strerror(rval)); /* warning only */</div>
<div>+               }</div>
<div>             }</div>
<div> </div>
<div>             iterator->timestamp = file_timestamp;</div>
<div><br>
</div>
<div>In directory 'snort-2.9.7.0-alpha/src/preprocessors',</div>
<div>file 'perf-base.c', I found a call to fseek without a</div>
<div>corresponding check for a return value of < 0, indicating</div>
<div>failure.  The patch file below corrects this issue:</div>
<div><br>
</div>
<div>--- perf-base.c.orig    2014-03-11 19:31:04.498623663 -0700</div>
<div>+++ perf-base.c 2014-03-11 19:37:46.668737416 -0700</div>
<div>@@ -1433,7 +1433,11 @@</div>
<div>         WarningMessage("%s: Failed to write stats\n", __FUNCTION__);</div>
<div> </div>
<div>         // fseek to adjust offset; ftruncate doesn't do that for us.</div>
<div>-        fseek(fh, start, SEEK_SET);</div>
<div>+        wrote = fseek(fh, start, SEEK_SET);</div>
<div>+       if (wrote == -1)</div>
<div>+       {</div>
<div>+           WarningMessage("%s: Failed to adjust offset\n", __FUNCTION__);</div>
<div>+       }</div>
<div>         ftruncate(fileno(fh), start);</div>
<div>     }</div>
<div><br>
</div>
<div>In directory "snort-2.9.7.0.alpha/src/dynamic-preprocessors/appid"</div>
<div>file 'luaDetectorModule.c', I found calls to fseek() and ftell()</div>
<div>without proper checks for a return value of < 0, which would</div>
<div>be an error.  The patch file below adds the necessary checks:</div>
<div><br>
</div>
<div>--- luaDetectorModule.c.orig    2014-03-11 19:40:14.065470783 -0700</div>
<div>+++ luaDetectorModule.c 2014-03-11 19:47:25.833346260 -0700</div>
<div>@@ -1037,9 +1037,24 @@</div>
<div>         }</div>
<div> </div>
<div>         /*Load lua file as a detector. */</div>
<div>-        fseek(file, 0, SEEK_END);</div>
<div>+        rval = fseek(file, 0, SEEK_END);</div>
<div>+       if (rval == -1)</div>
<div>+       {</div>
<div>+           _dpd.errMsg("Unable to seek lua detector '%s'\n",globs.gl_pathv[n]);</div>
<div>+           continue;</div>
<div>+       }</div>
<div>         validatorBufferLen = ftell(file);</div>
<div>-        fseek(file, 0, SEEK_SET);</div>
<div>+       if (validatorBufferLen == -1)</div>
<div>+       {</div>
<div>+           _dpd.errMsg("Unable to return offset on lua detector '%s'\n",globs.gl_pathv[n]);</div>
<div>+           continue;</div>
<div>+       }</div>
<div>+        rval = fseek(file, 0, SEEK_SET);</div>
<div>+       if (rval == -1)</div>
<div>+       {</div>
<div>+           _dpd.errMsg("Unable to seek lua detector '%s'\n",globs.gl_pathv[n]);</div>
<div>+           continue;</div>
<div>+       }</div>
<div> </div>
<div>         if ((validatorBuffer = malloc(validatorBufferLen + 1)) == NULL)</div>
<div>         {</div>
<div><span class="" style="white-space:pre"></span> </div>
<div>I am attaching the patch file(s) to this email.</div>
<div><br>
</div>
<div>A 'make' results in a clean compile of the above patch file(s).</div>
<div><br>
</div>
<div>Bill Parker (wp02855 at gmail dot com)</div>
<div><br>
</div>
<div>Ho, Ha, Ha, Guard, Turn, Parry, Dodge, Spin, Ha, Thrust! (Robin Hood Daffy)</div>
</div>
</div>
</div>
</span>
</body>
</html>