Просмотр исходного кода

FLEXTypeEncodingParser: Improve malformed array detection

Tanner Bennett лет назад: 6
Родитель
Сommit
9332a87d98

+ 4 - 2
Classes/Utility/Runtime/FLEXTypeEncodingParser.m

@@ -321,8 +321,10 @@ BOOL FLEXGetSizeAndAlignment(const char *type, NSUInteger *sizep, NSUInteger *al
         
         if (!structOrUnion) {
             arrayCount = [self scanSize];
-            if (!arrayCount) {
-                // Arrays must have a count after the opening brace
+            if (!arrayCount || self.nextChar == FLEXTypeEncodingArrayEnd) {
+                // Malformed array type:
+                // 1. Arrays must have a count after the opening brace
+                // 2. Arrays must have an element type after the count
                 self.scan.scanLocation = start;
                 return -1;
             }

+ 9 - 1
FLEXTests/FLEXTypeEncodingParserTests.m

@@ -195,7 +195,15 @@ typedef struct HasUnion {
     XCTAssertEqual(RoundUpToMultipleOf4(13), 16);
 }
 
-- (void)testMethodSignatures {
+- (void)testUnsupportedMethodSignatures {
+    NSArray<NSString *> *unsupported = @[@"{?=[4]}16@0:8}"];
+    
+    for (NSString *signature in unsupported) {
+        XCTAssertFalse([FLEXTypeEncodingParser methodTypeEncodingSupported:signature cleaned:nil]);
+    }
+}
+
+- (void)testMethodSignatureCleaning {
     NSDictionary<NSString *, NSString *> *uncleanToClean = @{
         @"@28@0:8r^{basic_string<char, std::__1::char_traits<char>, "
         "std::__1::allocator<char> >={__compressed_pair<std::__1::"