OSDN Git Service

2006-01-24 David Ayers <d.ayers@inode.at>
authorayers <ayers@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 24 Jan 2006 23:37:24 +0000 (23:37 +0000)
committerayers <ayers@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 24 Jan 2006 23:37:24 +0000 (23:37 +0000)
PR libobjc/9751
* gc.c (class_ivar_set_gcinvisible): Replace strncpy with memcpy
and insure the new strings are '\0' termintated.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110187 138bc75d-0d04-0410-961f-82ee72b054a4

libobjc/ChangeLog
libobjc/gc.c

index e8fdc15..910ae98 100644 (file)
@@ -1,5 +1,11 @@
 2006-01-24  David Ayers  <d.ayers@inode.at>
 
 2006-01-24  David Ayers  <d.ayers@inode.at>
 
+       PR libobjc/9751
+       * gc.c (class_ivar_set_gcinvisible): Replace strncpy with memcpy
+       and insure the new strings are '\0' termintated.
+
+2006-01-24  David Ayers  <d.ayers@inode.at>
+
        PR libobjc/13946
        * configure.ac: Add include directives for --enable-objc-gc.
        * Makefile.in: Ditto.
        PR libobjc/13946
        * configure.ac: Add include directives for --enable-objc-gc.
        * Makefile.in: Ditto.
index 399d1aa..5101999 100644 (file)
@@ -397,30 +397,34 @@ class_ivar_set_gcinvisible (Class class, const char *ivarname,
       if (*type == _C_GCINVISIBLE)
        {
          char *new_type;
       if (*type == _C_GCINVISIBLE)
        {
          char *new_type;
+         size_t len;
 
          if (gc_invisible || ! __objc_ivar_pointer (type))
            return;     /* The type of the variable already matches the
                           requested gc_invisible type */
 
 
          if (gc_invisible || ! __objc_ivar_pointer (type))
            return;     /* The type of the variable already matches the
                           requested gc_invisible type */
 
-         /* The variable is gc_invisible and we have to reverse it */
-         new_type = objc_atomic_malloc (strlen (ivar->ivar_type));
-         strncpy (new_type, ivar->ivar_type,
-                  (size_t)(type - ivar->ivar_type));
+         /* The variable is gc_invisible so we make it gc visible.  */
+         new_type = objc_atomic_malloc (strlen(ivar->ivar_type));
+         len = (type - ivar->ivar_type);
+         memcpy (new_type, ivar->ivar_type, len);
+         new_type[len] = 0;
          strcat (new_type, type + 1);
          ivar->ivar_type = new_type;
        }
       else
        {
          char *new_type;
          strcat (new_type, type + 1);
          ivar->ivar_type = new_type;
        }
       else
        {
          char *new_type;
+         size_t len;
 
          if (! gc_invisible || ! __objc_ivar_pointer (type))
            return;     /* The type of the variable already matches the
                           requested gc_invisible type */
 
 
          if (! gc_invisible || ! __objc_ivar_pointer (type))
            return;     /* The type of the variable already matches the
                           requested gc_invisible type */
 
-         /* The variable is gc visible and we have to make it gc_invisible */
-         new_type = objc_malloc (strlen (ivar->ivar_type) + 2);
-         strncpy (new_type, ivar->ivar_type,
-                  (size_t)(type - ivar->ivar_type));
+         /* The variable is gc visible so we make it gc_invisible.  */
+         new_type = objc_malloc (strlen(ivar->ivar_type) + 2);
+         len = (type - ivar->ivar_type);
+         memcpy (new_type, ivar->ivar_type, len);
+         new_type[len] = 0;
          strcat (new_type, "!");
          strcat (new_type, type);
          ivar->ivar_type = new_type;
          strcat (new_type, "!");
          strcat (new_type, type);
          ivar->ivar_type = new_type;