if (!(dereference_flags & (1ULL << arg)))
                                goto next_arg;
 
-                       /* Check for __get_sockaddr */;
-                       if (str_has_prefix(fmt + i, "__get_sockaddr(")) {
-                               dereference_flags &= ~(1ULL << arg);
-                               goto next_arg;
-                       }
-
                        /* Find the REC-> in the argument */
                        c = strchr(fmt + i, ',');
                        r = strstr(fmt + i, "REC->");
                                a = strchr(fmt + i, '&');
                                if ((a && (a < r)) || test_field(r, call))
                                        dereference_flags &= ~(1ULL << arg);
+                       } else if ((r = strstr(fmt + i, "__get_dynamic_array(")) &&
+                                  (!c || r < c)) {
+                               dereference_flags &= ~(1ULL << arg);
+                       } else if ((r = strstr(fmt + i, "__get_sockaddr(")) &&
+                                  (!c || r < c)) {
+                               dereference_flags &= ~(1ULL << arg);
                        }
+
                next_arg:
                        i--;
                        arg++;