[dlls/kernel/atom16.c] strncpy elimination.

Peter Berg Larsen pebl at math.ku.dk
Sun Mar 27 14:03:29 CST 2005


Changelog:
	Dont trace uninitialized buffer. Change strncpy to memcpy.


Index: dlls/kernel/atom16.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/atom16.c,v
retrieving revision 1.1
diff -u -r1.1 atom16.c
--- dlls/kernel/atom16.c        3 Feb 2005 16:58:21 -0000       1.1
+++ dlls/kernel/atom16.c        27 Mar 2005 16:42:31 -0000
@@ -210,14 +210,14 @@

     if (ATOM_IsIntAtomA( str, &iatom )) return iatom;

-    TRACE("%s\n",debugstr_a(buffer));
+    TRACE("%s\n",debugstr_a(str));
+
+    if (!(table = ATOM_GetTable( TRUE ))) return 0;

     /* Make a copy of the string to be sure it doesn't move in linear memory. */
     lstrcpynA( buffer, str, sizeof(buffer) );

     len = strlen( buffer );
-    if (!(table = ATOM_GetTable( TRUE ))) return 0;
-
     hash = ATOM_Hash( table->size, buffer, len );
     entry = table->entries[hash];
     while (entry)
@@ -242,9 +242,10 @@
     entryPtr->next = table->entries[hash];
     entryPtr->refCount = 1;
     entryPtr->length = len;
-    /* Some applications _need_ the '\0' padding provided by this strncpy */
-    strncpy( entryPtr->str, buffer, ae_len - sizeof(ATOMENTRY) + 1 );
-    entryPtr->str[ae_len - sizeof(ATOMENTRY)] = '\0';
+    memcpy( entryPtr->str, buffer, len);
+    /* Some applications _need_ the '\0' padding provided by memset */
+    /* Note that 1 byte of the str is accounted for in the ATOMENTRY struct */
+    memset( entryPtr->str+len, 0, ae_len - sizeof(ATOMENTRY) - (len - 1));
     table->entries[hash] = entry;
     TRACE("-- new 0x%x\n", entry);
     return HANDLETOATOM( entry );





More information about the wine-patches mailing list