]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/Kernel/IODeviceTreeSupport.cpp
xnu-2782.20.48.tar.gz
[apple/xnu.git] / iokit / Kernel / IODeviceTreeSupport.cpp
index 5d61880867fbf17a9b6dd9f6195496e0a4fd6ec1..6533ed937dbdd034862c7b474b28d4313a7eb894 100644 (file)
@@ -776,6 +776,7 @@ CompareKey( OSString * key,
     OSString           *string;
     const char         *ckey;
     UInt32                     keyLen;
     OSString           *string;
     const char         *ckey;
     UInt32                     keyLen;
+    UInt32          nlen;
     const char         *names;
     const char         *lastName;
     bool                       wild;
     const char         *names;
     const char         *lastName;
     bool                       wild;
@@ -800,16 +801,16 @@ CompareKey( OSString * key,
 
     do {
         // for each name in the property
 
     do {
         // for each name in the property
+        nlen = strnlen(names, lastName - names);
         if( wild)
         if( wild)
-            matched = (0 == strncmp( ckey, names, keyLen - 1 ));
+            matched = ((nlen >= (keyLen - 1)) && (0 == strncmp(ckey, names, keyLen - 1)));
         else
         else
-            matched = (keyLen == strlen( names ))
-                    && (0 == strncmp( ckey, names, keyLen ));
+            matched = (keyLen == nlen) && (0 == strncmp(ckey, names, keyLen));
 
         if( matched)
             result = names;
 
 
         if( matched)
             result = names;
 
-        names = names + strlen( names) + 1;
+        names = names + nlen + 1;
 
     } while( (names < lastName) && (false == matched));
 
 
     } while( (names < lastName) && (false == matched));
 
@@ -927,7 +928,7 @@ void IODTSetResolving( IORegistryEntry *    regEntry,
     return;
 }
 
     return;
 }
 
-#if defined(__arm__) || defined(__i386__) || defined(__x86_64__)
+#if   defined(__arm__) || defined(__i386__) || defined(__x86_64__)
 static SInt32 DefaultCompare( UInt32 cellCount, UInt32 left[], UInt32 right[] )
 {
        cellCount--;
 static SInt32 DefaultCompare( UInt32 cellCount, UInt32 left[], UInt32 right[] )
 {
        cellCount--;
@@ -1239,6 +1240,7 @@ OSData * IODTFindSlotName( IORegistryEntry * regEntry, UInt32 deviceNumber )
     OSData                             *ret = 0;
     UInt32                             *bits;
     UInt32                             i;
     OSData                             *ret = 0;
     UInt32                             *bits;
     UInt32                             i;
+    size_t              nlen;
     char                               *names;
     char                               *lastName;
     UInt32                             mask;
     char                               *names;
     char                               *lastName;
     UInt32                             mask;
@@ -1266,15 +1268,16 @@ OSData * IODTFindSlotName( IORegistryEntry * regEntry, UInt32 deviceNumber )
     for( i = 0; (i <= deviceNumber) && (names < lastName); i++ ) {
 
         if( mask & (1 << i)) {
     for( i = 0; (i <= deviceNumber) && (names < lastName); i++ ) {
 
         if( mask & (1 << i)) {
+            nlen = 1 + strnlen(names, lastName - names);
             if( i == deviceNumber) {
             if( i == deviceNumber) {
-                data = OSData::withBytesNoCopy( names, 1 + strlen( names));
+                data = OSData::withBytesNoCopy(names, nlen);
                 if( data) {
                     regEntry->setProperty("AAPL,slot-name", data);
                     ret = data;
                     data->release();
                 }
             } else
                 if( data) {
                     regEntry->setProperty("AAPL,slot-name", data);
                     ret = data;
                     data->release();
                 }
             } else
-                names += 1 + strlen( names);
+                names += nlen;
         }
     }
 
         }
     }