Enlightenment CVS committal

Author  : mej
Project : eterm
Module  : libast

Dir     : eterm/libast/src


Modified Files:
        conf.c file.c mem.c strings.c 


Log Message:
Tue Jun 29 17:14:13 2004                        Michael Jennings (mej)

Some small fixes suggested by Charlie Gordon <[EMAIL PROTECTED]>.
Minor build tweaks...updated to new release number.

----------------------------------------------------------------------

===================================================================
RCS file: /cvsroot/enlightenment/eterm/libast/src/conf.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -3 -r1.20 -r1.21
--- conf.c      29 Jun 2004 18:32:20 -0000      1.20
+++ conf.c      29 Jun 2004 21:18:08 -0000      1.21
@@ -31,7 +31,7 @@
  * @author Michael Jennings <[EMAIL PROTECTED]>
  */
 
-static const char cvs_ident[] = "$Id: conf.c,v 1.20 2004/06/29 18:32:20 mej Exp $";
+static const char cvs_ident[] = "$Id: conf.c,v 1.21 2004/06/29 21:18:08 mej Exp $";
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
@@ -502,9 +502,10 @@
         switch (*pbuff) {
           case '~':
               D_CONF(("Tilde detected.\n"));
-              if (!in_single && !in_double && getenv("HOME")) {
-                  strncpy(newbuff + j, getenv("HOME"), max - j);
-                  cnt1 = strlen(getenv("HOME")) - 1;
+              EnvVar = getenv("HOME");
+              if (!in_single && !in_double && EnvVar && *EnvVar) {
+                  spiftool_safe_strncpy(newbuff + j, getenv("HOME"), max - j);
+                  cnt1 = strlen(EnvVar) - 1;
                   cnt2 = max - j - 1;
                   j += MIN(cnt1, cnt2);
               } else {
@@ -588,8 +589,8 @@
                   FREE(Command);
                   if (Output) {
                       if (*Output) {
+                          spiftool_safe_strncpy(newbuff + j, Output, max - j);
                           l = strlen(Output) - 1;
-                          strncpy(newbuff + j, Output, max - j);
                           cnt2 = max - j - 1;
                           j += MIN(l, cnt2);
                       } else {
@@ -618,8 +619,8 @@
                   FREE(Command);
                   if (Output) {
                       if (*Output) {
+                          spiftool_safe_strncpy(newbuff + j, Output, max - j);
                           l = strlen(Output) - 1;
-                          strncpy(newbuff + j, Output, max - j);
                           cnt2 = max - j - 1;
                           j += MIN(l, cnt2);
                       } else {
@@ -656,8 +657,8 @@
                         break;
                   }
                   EnvVar[k] = 0;
-                  if ((tmp = getenv(EnvVar))) {
-                      strncpy(newbuff, tmp, max - j);
+                  if ((tmp = getenv(EnvVar)) && *tmp) {
+                      spiftool_safe_strncpy(newbuff, tmp, max - j);
                       cnt1 = strlen(tmp) - 1;
                       cnt2 = max - j - 1;
                       j += MIN(cnt1, cnt2);
@@ -759,7 +760,7 @@
         /* Don't try if it's too long */
         if (n > 0 && n <= maxpathlen) {
             /* Compose the /path/file combo */
-            strncpy(full_path, path, n);
+            memcpy(full_path, path, n);
             if (full_path[n - 1] != '/') {
                 full_path[n++] = '/';
             }
===================================================================
RCS file: /cvsroot/enlightenment/eterm/libast/src/file.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- file.c      3 Feb 2004 23:16:59 -0000       1.8
+++ file.c      29 Jun 2004 21:18:08 -0000      1.9
@@ -28,11 +28,11 @@
  * This file contains file-related functions.
  *
  * @author Michael Jennings <[EMAIL PROTECTED]>
- * $Revision: 1.8 $
- * $Date: 2004/02/03 23:16:59 $
+ * $Revision: 1.9 $
+ * $Date: 2004/06/29 21:18:08 $
  */
 
-static const char cvs_ident[] = "$Id: file.c,v 1.8 2004/02/03 23:16:59 mej Exp $";
+static const char cvs_ident[] = "$Id: file.c,v 1.9 2004/06/29 21:18:08 mej Exp $";
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
@@ -84,8 +84,7 @@
     }
 
     if (len) {
-        strncpy(ftemplate, buff, len);
-        ftemplate[len - 1] = 0;
+        spiftool_safe_strncpy(ftemplate, buff, len);
     }
     return (fd);
 }
===================================================================
RCS file: /cvsroot/enlightenment/eterm/libast/src/mem.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -3 -r1.20 -r1.21
--- mem.c       10 Mar 2004 22:50:21 -0000      1.20
+++ mem.c       29 Jun 2004 21:18:09 -0000      1.21
@@ -28,11 +28,11 @@
  * This file contains the memory management subsystem.
  *
  * @author Michael Jennings <[EMAIL PROTECTED]>
- * $Revision: 1.20 $
- * $Date: 2004/03/10 22:50:21 $
+ * $Revision: 1.21 $
+ * $Date: 2004/06/29 21:18:09 $
  */
 
-static const char cvs_ident[] = "$Id: mem.c,v 1.20 2004/03/10 22:50:21 mej Exp $";
+static const char cvs_ident[] = "$Id: mem.c,v 1.21 2004/06/29 21:18:09 mej Exp $";
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
@@ -156,7 +156,7 @@
     D_MEM(("Storing as pointer #%lu at %10p (from %10p).\n", memrec->cnt, p, 
memrec->ptrs));
     p->ptr = ptr;
     p->size = size;
-    strncpy(p->file, filename, LIBAST_FNAME_LEN);
+    spiftool_safe_strncpy(p->file, filename, LIBAST_FNAME_LEN);
     p->file[LIBAST_FNAME_LEN] = 0;
     p->line = line;
 }
@@ -267,7 +267,7 @@
     D_MEM(("Changing variable %s (%10p, %lu -> %10p, %lu)\n", var, oldp, p->size, 
newp, size));
     p->ptr = newp;
     p->size = size;
-    strncpy(p->file, filename, LIBAST_FNAME_LEN);
+    spiftool_safe_strncpy(p->file, filename, LIBAST_FNAME_LEN);
     p->line = line;
 }
 
@@ -581,6 +581,7 @@
     register char *newstr;
     register size_t len;
 
+    ASSERT_RVAL(!SPIF_PTR_ISNULL(str), SPIF_NULL_TYPE_C(char *));
     USE_VAR(var);
     D_MEM(("Variable %s (%10p) at %s:%lu\n", var, str, NONULL(filename), line));
 
===================================================================
RCS file: /cvsroot/enlightenment/eterm/libast/src/strings.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- strings.c   29 Jun 2004 18:32:20 -0000      1.18
+++ strings.c   29 Jun 2004 21:18:09 -0000      1.19
@@ -30,7 +30,7 @@
  * @author Michael Jennings <[EMAIL PROTECTED]>
  */
 
-static const char cvs_ident[] = "$Id: strings.c,v 1.18 2004/06/29 18:32:20 mej Exp $";
+static const char cvs_ident[] = "$Id: strings.c,v 1.19 2004/06/29 21:18:09 mej Exp $";
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
@@ -53,6 +53,7 @@
     REQUIRE_RVAL(haystack != SPIF_NULL_TYPE(ptr), SPIF_NULL_TYPE(ptr));
     REQUIRE_RVAL(needlelen > 0, SPIF_NULL_TYPE(ptr));
     REQUIRE_RVAL(haystacklen > 0, SPIF_NULL_TYPE(ptr));
+    REQUIRE_RVAL(haystacklen > needlelen, SPIF_NULL_TYPE(ptr));
     for (i = 0; i < len; i++) {
         if (!memcmp(hs + i, n, needlelen)) {
             return (hs + i);
@@ -195,6 +196,47 @@
 #endif
 
 /**
+ * Safer strncpy() with no NUL padding or wasted calculations.
+ */
+spif_bool_t
+spiftool_safe_strncpy(spif_charptr_t dest, const spif_charptr_t src, spif_int32_t 
size)
+{
+    spif_char_t c;
+    spif_charptr_t s = src, pbuff = dest;
+    spif_charptr_t max_pbuff = dest + size - 1;
+
+    ASSERT_RVAL(!SPIF_PTR_ISNULL(dest), FALSE);
+    REQUIRE_RVAL(!SPIF_PTR_ISNULL(src), FALSE);
+    REQUIRE_RVAL(size > 0, FALSE);
+
+    for (; (c = *s) && (pbuff < max_pbuff); s++, pbuff++) {
+        *pbuff = c;
+    }
+    *pbuff = 0;
+    return ((c == 0) ? (TRUE) : (FALSE));
+}
+
+/**
+ * Variant of strncat() which uses the safe strncpy() replacement above.
+ */
+spif_bool_t
+spiftool_safe_strncat(spif_charptr_t dest, const spif_charptr_t src, spif_int32_t 
size)
+{
+    spif_int32_t len;
+
+    ASSERT_RVAL(!SPIF_PTR_ISNULL(dest), FALSE);
+    REQUIRE_RVAL(!SPIF_PTR_ISNULL(src), FALSE);
+    REQUIRE_RVAL(size > 0, FALSE);
+
+    len = strnlen(dest, size);
+    if ((len < 0) || (len >= size)) {
+        return FALSE;
+    } else {
+        return spiftool_safe_strncpy(dest + len, size - len, src);
+    }
+}
+
+/**
  * Returns a portion of a larger string.
  */
 spif_charptr_t




-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to